匹配单词的正则表达式

时间:2014-06-27 17:50:02

标签: regex

这可能很容易,但由于某种原因,我无法得到表达。我想找到给定字符串中所有匹配单词的位置/索引。例如

"这是和NAND XOR NOR AATD"。现在,我想找到以A开头的匹配字符串的索引,并且可以在AZ之间有任何字符,但必须以T或D结尾。所以结果应该看起来像[9,AND] [14,AND] [24,AAT] [ 25,ATD]

我的表达式(?s)(A。[TD])缺少最后一个索引。提前致谢。我正在使用python。

3 个答案:

答案 0 :(得分:2)

如果您尝试使用正则表达式执行此操作,则需要Positive Lookahead断言。我将正则表达式中的点替换为[A-Z],因为您声明要匹配单词字符。

>>> import re
>>> p = re.compile(r'(?=(A[A-Z][TD]))')
>>> for m in p.finditer('THIS IS AND NAND XOR NOR AATD'):
...     print [m.start() + 1, m.group(1)]

[9, 'AND']
[14, 'AND']
[26, 'AAT']
[27, 'ATD']

答案 1 :(得分:1)

你实际上并没有匹配单词而是序列,问题是你正在寻找重叠序列。

有关此主题的讨论,请参阅Overlapping regex matches

答案 2 :(得分:0)

首先匹配文字:

/^(.*)(A[A_Z]*[TD])/g

然后匹配元素的索引将是第一个匹配序列的长度!