python正则表达式字符串拆分

时间:2013-04-16 15:18:11

标签: python regex

在python中, 我有以下字符串:

|a|b\|c|d|

我想将字符串拆分为:

a
b\c
d

基本上,我必须用'|'拆分分隔符,但需要特别注意反斜杠

3 个答案:

答案 0 :(得分:8)

不需要正则表达式:

>>> s = '|a|b\\|c|d|'
>>> s.replace('\\|', '\\').strip('|').split('|')
['a', 'b\\c', 'd']

答案 1 :(得分:3)

如果你想使用正则表达式,你需要一个负面的lookbehind断言。

import re
data = '|a|b\|c|d|'
matches = re.split(r'(?<!\\)\|', data)

我们必须逃避一些特殊角色。 \|与单|匹配。 (?<!\\)确保|之前没有反斜杠。

现在我们在列表中有一个前导和尾随空字符串。我们使用过滤器删除它们。

filter(bool, matches)

答案 2 :(得分:1)

我不清楚你是否认为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']

或者,您可以使用csv

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']
相关问题