Reguar 表达式从 python 获取单行和多行

Reguar Expression to fetch single line and multi line from python

提问人:Vivek Sable 提问时间:11/1/2023 更新时间:11/1/2023 访问量:28

问:

输入数据

I am not Myc wooo0
Myc wooo1
Myc wooo3
+ rt ...4
do not consider me5
Myc wooo6
+ rt ....7
+ rt ....8
do not consider me9
+ rt ....10
+ rt ....11
Myc wooo12

我有上面的输入数据,需要获取具有以下条件的行 -

  1. 行必须以“Myc”开头
  2. 行必须以“Myc”开头,随后的行必须以“+”开头

预期输出:

Myc wooo -1 I am fist
Myc wooo1
Myc wooo3
+ rt ...4
Myc wooo6
+ rt ....7
Myc wooo12

我尝试在 Python 中使用以下 reguar 表达式。

    pattern_myc = '\n(Myc[^\n]*\n\+[^\n]*\n|Myc[^\n]*\n)'
    result_lines = re.findall(pattern_myc, input_text)

但没有得到预期的输出。

我尝试了字符串过程,我能够获得预期的输出。

由于数据量大,我想定期使用经验

python-3.x 正则表达式 python-re

评论


答:

2赞 anubhava 11/1/2023 #1

您可以在 MULTILINE 模式下使用此正则表达式:

^Myc.*(?:\r?\n\+.*)?

或者使用内联 MULTILINE 模式:

(?m)^Myc.*(?:\r?\n\+.*)?

正则表达式演示

正则表达式详细信息:

  • ^Myc:一开始就匹配Myc
  • .*:匹配任何文本
  • (?:\r?\n\+.*)?:(可选)匹配一个新行,后跟第二行中的所有内容+

法典:

import re

result_lines = re.findall(r"(?m)^Myc.*(?:\r?\n\+.*)?", input_text)
print (result_lines)

评论

0赞 Vivek Sable 11/1/2023
谢谢@anubhava。我尝试了 python 代码,但它只给出了 ' ['Myc wooo -1 I am fist1']' 行。我正在使用result_lines = re.findall(r"^Myc.*(?:\r?\n\+.*)?", input_text)
1赞 anubhava 11/1/2023
正如我所写的,您需要使用 MULTILINE 模式。像这样使用它:re.findall(r"(?m)^Myc.*(?:\r?\n\+.*)?", input_text)
1赞 Vivek Sable 11/1/2023
谢谢,我在正则表达式中添加了 \n 以考虑换行符,因为需要将此行连接到文件中。r"(?m)^Myc.*(?:\r?\n\+.*)?\n"