这可能很容易,但由于某种原因,我无法得到表达。我想找到给定字符串中所有匹配单词的位置/索引。例如
"这是和NAND XOR NOR AATD"。现在,我想找到以A开头的匹配字符串的索引,并且可以在AZ之间有任何字符,但必须以T或D结尾。所以结果应该看起来像[9,AND] [14,AND] [24,AAT] [ 25,ATD]
我的表达式(?s)(A。[TD])缺少最后一个索引。提前致谢。我正在使用python。
答案 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
然后匹配元素的索引将是第一个匹配序列的长度!