【问题标题】:How to match everything before a pattern, until reach another pattern如何匹配模式之前的所有内容,直到达到另一个模式
【发布时间】:2022-09-24 19:26:12
【问题描述】:

使用 Python 正则表达式,我试图匹配模式之前的所有内容(包括换行符),直到达到另一个模式。 这是文本:

东风GC 2836 -07-0411B
IMUD - DHI211 (MOOYEHBF P/ SHDUF)
C7000039694 (PD MOFIBD PODF 宝洁FD)

下面的代码匹配 \"C700\" 模式之前的所有内容。我需要 \"C700\" 之前的所有内容,但仅限于 \"IMUD\"(包括它)。所以,结果应该是\"IMUD - DHI211 (MOOYEHBF P/ SHDUF)\"

(?s)^.+?(?=C700\\d*(?=\\s))

在 regex101 中查看:LINK

  • 欢迎来到 SO,感谢好问题(其中有努力/代码和输入样本;保持下去),请在您的问题中添加输出样本以使其更清楚,谢谢。
  • 尝试^[A-Z]{4} -.*?(?=\\s*C700\\d*\\s)msi 标志。见regex101.com/r/wtRD1L/2。或者,另一个建议:(?mi)^\\w+ - \\w+\\s*\\([^()]*\\)(?=\\s*C700\\d*\\s)。请提供确切的模式要求,而不仅仅是您想要匹配的内容。

标签: python regex match


【解决方案1】:

这是一个简单的正则表达式:

pattern = re.compile(r'(IMUD .*?)(C700)', flags=re.DOTALL)

解释:

  • 第一组(IMUD .*?) 捕获IMUD 之后的所有内容不贪心方式(意味着当找到第二个捕获组 (C700) 时它会停止捕获
  • 我们使用标志re.DOTALL 以便. 也匹配新行\n

要得到你想要的,只需检索第一组匹配的

s = """DFGC 2836 -07-0411B
IMUD - DHI211 (MOOYEHBF P/ SHDUF)
C7000039694 (PD MOFIBD PODF BAOJFD)"""

res = pattern.search(s).group(1)
res
>>> 'IMUD - DHI211 (MOOYEHBF P/ SHDUF)\n'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多