我想匹配 KEYWORD 之前的任何用户评论。另外,我想在关键字之前的最后一条评论之后跳过变量不重要的文本。
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)
我想要以下输出:
first comment /user_x
second comment
in two lines /user_y
我做错了什么?非常感谢
最佳答案
您可以使用
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 .
关于python - 如何在正则表达式中隐藏匹配之后和关键字之前的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54651288/