因此,我正试图了解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%', '.']
(注意,您不必退出%
(