python正则表达式字符串拆分
在python中, 我有以下字符串:python正则表达式字符串拆分,python,regex,Python,Regex,在python中, 我有以下字符串: |a|b\|c|d| 我想将字符串拆分为: a b\c d 基本上,我必须使用“|”分隔符拆分,但需要特别注意反斜杠不需要正则表达式: >>> s = '|a|b\\|c|d|' >>> s.replace('\\|', '\\').strip('|').split('|') ['a', 'b\\c', 'd'] 如果你想使用正则表达式,你需要一个否定的lookback断言 import re data = '|a|
|a|b\|c|d|
我想将字符串拆分为:
a
b\c
d
基本上,我必须使用“|”分隔符拆分,但需要特别注意反斜杠不需要正则表达式:
>>> s = '|a|b\\|c|d|'
>>> s.replace('\\|', '\\').strip('|').split('|')
['a', 'b\\c', 'd']
如果你想使用正则表达式,你需要一个否定的lookback断言
import re
data = '|a|b\|c|d|'
matches = re.split(r'(?<!\\)\|', data)
我不清楚你的意思是不是说
b|c
是转义b\|c
的结果,而你有打字错误?您的结果是非标准的,因为\
通常用于逃避拆分并保留以下分隔符
我假设在大多数情况下,您想要更常见的b | c
对于正则表达式解决方案,(对于本例中的b\c
),这是有效的:
>>> [e for e in re.split(r'\|',s.replace('\|','\\')) if e]
['a', 'b\\c', 'd']
我使用Python替换“\\;”而不是正则表达式,因为它使正则表达式更容易理解
如果您想要(我认为更常见的)b | c
只需重新添加即可:
>>> [e.replace('\\','|') for e in re.split(r'\|',s.replace('\|','\\')) if e]
['a', 'b|c', 'd']
或者,您可以使用:
印刷品:
['a', 'b|c', 'd']
我是正则表达式的新手。尝试了一些类似于:re.split('.*.\\\\\..\\\\\\'',x)的方法来确认:反斜杠表示“忽略以下分隔符”?这有点不寻常——通常它的意思更像是“下面的字符没有被用作分隔符”,并且您希望
a
,b | c
,d
@DSM,它一定是打字错误。他/她可能指的是b | c
,而不是b\c
@alexis:但OP在评论时没有提及此事,只是“谢谢你”,而不是“事实上,这不是我想要的”,这很难错过。一种可能是OP误解了问题要求。是的,很可能:-)谢谢。我知道它不需要正则表达式。但更多的是为了学习。
import StringIO
import csv
s='|a|b\|c|d|'
f = StringIO.StringIO(s)
reader = csv.reader(f, delimiter='|', escapechar='\\')
for row in reader:
print filter(bool,row)
['a', 'b|c', 'd']