我试图拆分换行符,如果它没有直接前面的空格。例如:
CA, The title\n # yes
CA, the title \n # no
要拆分任何换行符,我可以lines = contents.split('\r\n')
。我怎么做修改后的拆分?
答案 0 :(得分:5)
您需要使用负面的后置断言。引用re
doc,
<强>
(?<!...)
强>如果字符串中的当前位置前面没有匹配
....
,则匹配这称为负后瞻性断言
所以你的RegEx会像这样工作
data = """CA, The title
CA, the title
data"""
import re
print re.split(r'(?<!\s)\n', data)
# ['CA, The title', 'CA, the title \ndata']
在这里,(?<!\s)
告诉RegEx引擎,只有当它前面没有\s
(这意味着任何空格字符)时才匹配此后的字符串。
从re
doc,
\s
的文档
如果未指定
UNICODE
标志,则它与任何空格字符匹配,这相当于集合[ \t\n\r\f\v]
答案 1 :(得分:4)
简单string.split
不会歧视,因为它无法在任何先前的背景下看待它。
你需要re.split
,正则表达式具有负面的后瞻断言,\n
前面没有空格。
s = 'CA, the title \nCA, The title\nCA, the title\n'
re.split(r'(?<! )\n', s)
['CA, the title \nCA, The title', 'CA, the title', '']
答案 2 :(得分:3)
带有负面的背后。
>>> contents = 'CA, The title\nCA, the title \nCA, The title\n'
>>> re.split(r'(?<! )\n', contents)
['CA, The title', 'CA, the title \nCA, The title', '']
答案 3 :(得分:0)
你也可以使用积极的lookbehind。 \S
匹配任何非空格字符。
>>> s = 'CA, the title \nCA, The title\nCA, the title\n'
>>> re.split(r'(?<=\S)\n', s)
['CA, the title \nCA, The title', 'CA, the title', '']