正则表达式(Reg-exp).为什么这样有效



因此,我正试图了解regexp。第一个查询没有给出结果,但第二个查询给出了结果。我无法理解,为什么是这样。

,我想把这个句子标记化

text = 'The interest does not exceed 8.25%.'
pattern = r'w+|d+.d+%|[^w+s]+'
tokenizer = RegexpTokenizer(pattern)
tokenizer.tokenize(text)

这给了我

['The', 'interest', 'does', 'not', 'exceed', '8', '.', '25', '%']

我想要

['The', 'interest', 'does', 'not', 'exceed', '8.25%']
I get my result with,
pattern = r'd+.d+%|w+|[^w+s]+'

为什么它适用于第二种模式?这两个查询不应该都起作用吗?

问题是w匹配字母、数字和下划线。由于这个表达式在你的ored表达式中是第一位的,所以它是优先的。

['The', 'interest', 'does', 'not', 'exceed', '8', '.',     '25',  '%']
w+       w+       w+     w+     w+    w+  [^ws]+  w+  [^ws]+

第二个表达式从来没有机会匹配,因为它被第一个表达式部分消耗掉了。

反转ored表达式:

r'd+.d+%|w+|[^ws]+'

只是使用基本re模块进行的测试

text = 'The interest does not exceed 8.25%.'
pattern = r'd+.d+%|w+|[^ws]+'
print(re.findall(pattern,text))

打印:

['The', 'interest', 'does', 'not', 'exceed', '8.25%', '.']

(注意,您不必退出%(

最新更新