Python 正则表达式选择整行
我想使用正则表达式从文本字符串中捕获所有行。我该怎么做?这些都不管用。第一个几乎可以工作,但无法捕获\r\nPython 正则表达式选择整行,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
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
(换行符),以下解决方案可能会有所帮助:
注意,解决方案也将返回空行
细节
-除CR和LF字符以外的一个或多个字符[^\r\n]+
-一个CR和一个可选的LF字符(\r\n?| \n
)或(\r\n?
)一个换行符,仅LF(|
)\n
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
下一行,内尔
\u2028年
分线器
\u2029年
段落分隔符,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)