![](/img/trans.png)
[英]How to get all the text before and after some characters using regular expressions
[英]How to hide text after matching and before keyword in regular expressions?
我想匹配所有用户评论,直到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演示
细节
COMMENTS:
-文字子串 \\s*
-0+空格 ((?:(?:(?!KEYWORD:).)+?/(?:user_x|user_y))+)
-捕获组1(如果存在匹配项, match.group(1)
将保留此值):一个或多个重复
(?:(?!KEYWORD:).)+?
-任何不会启动KEYWORD:
char序列的char,一个或多个但尽可能少 /
-一/
炭 (?:user_x|user_y)
- user_x
或user_x
.+?KEYWORD:
-一个KEYWORD:
任意1个或多个字符后,应尽可能少。 参见regex演示 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.