社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

m2as3registeredservices ohmone • 4 年前 • 1723 次点击  

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

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 输入字符串之后是 计数 属性