我试图提取之前Y被边界分隔的任何单词。因为我试图使用(?m)标志将每一行视为单独的记录,并尝试捕获\w+的前瞻\s+Y,但我只能打印第一个匹配,而不是第二个匹配(IMP1)。print(foo)this is IMP Y textand this is also IMP1 Y textthis is not so IMP2 N textY is not important目前无果的尝试:>>> m = re.search('(?m).*?(\w+)(?=\s+Y)',foo)>>> m.groups()('IMP',)>>>>>> m = re.search('(?m)(?<=\s)(\w+)(?=\s+Y)',foo)>>> m.groups()('IMP',)>>>预期结果是:('IMP','IMP1')
2 回答
慕慕森
TA贡献1856条经验 获得超17个赞
您可以使用
\w+(?=[^\S\r\n]+Y\b)
请参阅正则表达式演示。细节:
\w+
- 一个或多个字母/数字/下划线 -(?=[^\S\r\n]+Y\b)
- 紧跟一个或多个除 CR 和 LF 之外的空格,然后Y
作为整个单词(\b
是单词边界)。
查看Python 演示:
import re
foo = "this is IMP Y text\nand this is also IMP1 Y text\nthis is not so IMP2 N text\nY is not important"
print(re.findall(r'\w+(?=[^\S\r\n]+Y\b)', foo))
# => ['IMP', 'IMP1']
添加回答
举报
0/150
提交
取消