Python 正则表达式选择整行

Python 正则表达式选择整行,python,regex,Python,Regex,我想使用正则表达式从文本字符串中捕获所有行。我该怎么做?这些都不管用。第一个几乎可以工作,但无法捕获\r\n import re given_text = '1stline\n2ndline\r3rdline\r\n4thline' list_of_lines = re.findall('(?m)^.*$', given_text) print(list_of_lines) list_of_lines = re.findall('(?m)^.*(\r\n|\r|\n|$)', given_t

我想使用正则表达式从文本字符串中捕获所有行。我该怎么做?这些都不管用。第一个几乎可以工作,但无法捕获\r\n

import re

given_text = '1stline\n2ndline\r3rdline\r\n4thline'
list_of_lines = re.findall('(?m)^.*$', given_text)
print(list_of_lines)

list_of_lines = re.findall('(?m)^.*(\r\n|\r|\n|$)', given_text)
print(list_of_lines)

list_of_lines = re.findall(r'(?m)^.*?(\r\n|\r|\n|$)', given_text)
print(list_of_lines)


虽然它不使用正则表达式

given_text.splitlines()
将产生

['1stline', '2ndline', '3rdline', '4thline']
编辑:根据您的评论请求,如果您必须使用正则表达式

re.split("\n\r+|\r\n+|\n+|\r+", given_text)
也会产生

['1stline', '2ndline', '3rdline', '4thline']

此代码提供带有正则表达式的行列表:

import re
given_text = '1stline\n2ndline\r3rdline\r\n4thline'
list_of_lines = re.split(r'\r\n|\r|\n', given_text) 
print(list_of_lines)
结果:

['1stline', '2ndline', '3rdline', '4thline']
当然,
splitlines()
是这项工作的合适工具

如果您只需要处理CR、
\r
(回车)和LF、
\n
(换行符),以下解决方案可能会有所帮助:

注意,解决方案也将返回空行

细节

  • [^\r\n]+
    -除CR和LF字符以外的一个或多个字符
  • \r\n?| \n
    -一个CR和一个可选的LF字符(
    \r\n?
    )或(
    |
    )一个换行符,仅LF(
    \n
如果需要支持所有可能的Unicode换行符,可以使用

re.findall(r'[^\r\n\x0B\x0C\x85\u2028\u2029]+', given_text)
re.split(r'\r\n?|[\n\x0B\x0C\x85\u2028\u2029]', given_text)
注释

烧焦 描述
\r(\x0D)
回车
\n(\x0A)
换行,左前
\x0B
行列表
\x0C
表格提要
‎\x85
下一行,内尔
\u‎2028年
分线器
\u‎2029年
段落分隔符,PS
那很有帮助。谢谢我仍然想知道如何使用regex。使用一个使用regex的方法进行更新。要匹配所有非空行,可以使用
re.findall('[^\r\n]+',给定文本)
。或者,如果您也需要获得空行,您可以使用
re.split(r'\r\n?|\n',给定文本)
。谢谢,Franco。这似乎很有效。我认为维克托的作品也很管用,更简洁一点。@RyanB.Jawad I。在过去,我经常被Unicode换行符欺骗,所以我决定将它们包括在解决方案中。我很欣赏它的彻底性。正则表达式看起来应该很简单,但有太多奇怪的微妙之处让我迷惑不解。
re.findall(r'[^\r\n\x0B\x0C\x85\u2028\u2029]+', given_text)
re.split(r'\r\n?|[\n\x0B\x0C\x85\u2028\u2029]', given_text)