python - 如何在正则表达式中隐藏匹配之后和关键字之前的文本?

标签 python regex python-3.x

我想匹配 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_xuser_x
  • .+?KEYWORD: - 任意 1 个或多个字符后的 KEYWORD:,尽可能少。

请参阅regex demo .

关于python - 如何在正则表达式中隐藏匹配之后和关键字之前的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54651288/

相关文章:

python - Pandas 从一个数据框中删除另一个数据框中的所有元素

python - jEdit 上下划线字符消失

java - 正则表达式从行中删除单词 - 由 java 进行

python - 如何计算移动物体的速度

python - 删除一行中特定单词的重复

python - 在 IRIS DataSet 上运行 SVM 并得到 ValueError : Unknown label type: 'unknown'

c# - 多线程网络抓取工具的最佳解决方案?

java - Java 用户名/电子邮件地址的自定义正则表达式

python - 将整数集合存储在列表中

python - 从第一行开始在pycharm控制台中执行多行输入