Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式字符串拆分_Python_Regex - Fatal编程技术网

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|

在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|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']