Py学习  »  Python

Python正则表达式,带行开头的多行搜索

m2as3registeredservices ohmone • 4 年前 • 1744 次点击  

我有一个文本块,如下所示。

import re

one = """
ASDFABC
ABC
ABC
ABC
ASDF
ASDF
ASDF
ASDFABC"""

two = """\
ABC
ABC
ABC

ASDF
ASDF
ASDF
ASDFABC"""

我正在寻找一种方法来替换整个街区 启动 从ABC改为单一的“测试”。例如,变量1应该导致,

"""
ASDFABC
TEST
ASDF
ASDF
ASDF
ASDFABC"""

作为旁注,不从行首开始的ABC可以是“一”中第一行和最后一行所示的任何地方,这些应该被忽略。如“2”所示,ABC后面不一定跟着“\n”

这怎么可能呢?

迄今为止的尝试。

>>> re.findall(r"(?:\nABC.*)+", one)
['\nABC\nABC\nABC']

>>> re.findall(r"(?:\nABC.*)+", two)
['\nABC\nABC']

>>> re.findall(r"(?:\nABC.*)+", two, re.M)
['\nABC\nABC']

>>> re.findall(r"(?:\nABC.*)+", two, re.MULTILINE|re.DOTALL)
['\nABC\nABC\n\nASDF\nASDF\nASDF\nASDFABC']

>>> re.findall(r"(?:^ABC.*)+", two, re.MULTILINE|re.DOTALL)
['ABC\nABC\nABC\n\nASDF\nASDF\nASDF\nASDFABC']

>>> re.findall(r"(?:^ABC.*)+", two, re.MULTILINE)
['ABC', 'ABC', 'ABC']

>>> re.findall(r"(?:\n*ABC.*)+", two, re.MULTILINE)
['ABC\nABC\nABC', 'ABC']
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130676
文章 [ 1 ]  |  最新文章 4 年前
Wiktor Stribiżew
Reply   •   1 楼
Wiktor Stribiżew    4 年前

你可以用

re.sub(r'^ABC(?:\nABC)*$', 'TEST', text, flags=re.M)

看到了吗 regex demo . 细节 :

  • ^ -一行的开始(由于 re.M )
  • ABC -固定字符串
  • (?:\nABC)* -LF字符的零次或多次重复,以及 基础知识 一串
  • $ -行尾。

注意 flags=re.M 需要配合使用 flags= 由于中的下一个位置属性 re.sub 输入字符串之后是 计数 属性