仅当特定字符后跟包含特定字符的字符串时才能匹配

时间:2013-12-10 23:45:21

标签: regex string

我正在尝试替换字符串中的斜杠,但不是所有字符串 - 只有第一个逗号之前的斜杠。要做到这一点,我可能必须找到一种方法来匹配斜杠后面跟着包含逗号的字符串。

是否可以使用一个正则表达式执行此操作,即不先用逗号分隔字符串?

示例输入字符串:

Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4

我想得到什么:

Abc1.Def2.Ghi3,/Dore1/Mifa2/Solla3,Sido4

我已经尝试了一些前瞻性和后视技术而没有效果,所以目前在例如Python我首先分割数据:

test = 'Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4'
strlist = re.split(r',', test)
result = ','.join([re.sub(r'\/', r'.', strlist[0])] + strlist[1:])

我更喜欢的是使用特定的正则表达式模式而不是面向Python的解决方案,所以基本上我可以有一个patternreplacement,以便下面的代码会给我相同的结果:

result = re.sub(pattern, replacement, test)

感谢所有正则表达式 - 避免回答 - 我想知道我是否可以使用正则表达式执行此操作(例如,我可以使用sed代替Python)。

2 个答案:

答案 0 :(得分:3)

item = 'Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4'
print item.replace("/", ".", item.count("/", 0, item.index(",")))

这将打印您需要的内容。尽量避免使用正则表达式,因为它们很慢。

答案 1 :(得分:1)

你可以使用lookbehind表达式来查找字符串的开头而不是逗号。或者不要完全使用re

s = 'Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4'

left,sep,right = s.partition(',')

sep.join((left.replace('/','.'),right))
Out[24]: 'Abc1.Def2.Ghi3,/Dore1/Mifa2/Solla3,Sido4'