提问人:Vivek Sable 提问时间:11/1/2023 更新时间:11/1/2023 访问量:28
Reguar 表达式从 python 获取单行和多行
Reguar Expression to fetch single line and multi line from python
问:
输入数据
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
我有上面的输入数据,需要获取具有以下条件的行 -
- 行必须以“Myc”开头
- 行必须以“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)
但没有得到预期的输出。
我尝试了字符串过程,我能够获得预期的输出。
由于数据量大,我想定期使用经验
答:
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"
评论