我想匹配所有用户评论,直到KEYWORD。另外,我也想跳过关键字前的最后一条评论之后的不重要的可变文本。
id name serial
1 aaa 1
2 bbb 2
我的结果不会跳过不重要的文本。
import re`
string = '''
COMMENTS:
first comment /user_x
second comment
two lines /user_y
Here is some unimportant text.
KEYWORD:
Don't match comments or anything else after first keyword like this /user_x
KEYWORD: <- again
Also ignore same keyword which could appear serveral times.
'''
我想要以下输出:
pattern = re.compile(r'(?<=COMMENTS:)(.+?/(user_x|user_y))+?(?:.+?)(?=KEYWORD:)', flags=re.DOTALL)
match = re.search(pattern, string).group(0)
print(match)
我在做什么错?非常感谢
答案 0 :(得分:0)
您可以使用
pattern = re.compile(r'COMMENTS:\s*((?:(?:(?!KEYWORD:).)+?/(?:user_x|user_y))+).+?KEYWORD:', flags=re.DOTALL)
match = re.search(pattern, s)
if match:
print(match.group(1))
输出不再包含不相关的行:
first comment /user_x
second comment
two lines /user_y
请参见Python demo
详细信息
COMMENTS:
-文字子字符串\s*
-超过0个空格((?:(?:(?!KEYWORD:).)+?/(?:user_x|user_y))+)
-捕获组1(如果存在匹配项,match.group(1)
将保留此值):重复一次或多次
(?:(?!KEYWORD:).)+?
-不会开始KEYWORD:
字符序列的任何一个或多个字符,但应尽可能少/
-一个/
字符(?:user_x|user_y)
-user_x
或user_x
.+?KEYWORD:
-任意1个或多个字符后的KEYWORD:
,并且尽可能少。请参见regex demo。