python:用减号替换精确

时间:2012-10-25 20:43:33

标签: python regex

给出以下字符串:

"-local locally local test local."

我的目标是将字符串“local”替换为“we”,以便结果变为

"-local locally we test local."

到目前为止(在stackoverflow的帮助下:Python: find exact match)我已经能够提出以下正则表达式:

variable='local'
re.sub(r'\b%s([\b\s])' %variable, r'we\1', "-local locally local test local.")

但是我对这段代码有两个问题:

  1. 搜索经过减号,输出变为:

    '-we locally we test local.'
    

    应该在哪里

    '-local locally we test local.'
    
  2. 搜索以减号开头的字符串,例如“-local”,搜索失败

4 个答案:

答案 0 :(得分:2)

您可以使用空格作为分隔符将字符串分隔为子字符串。然后检查每个字符串,替换它是否与您要查找的字符串匹配,并重新组合它们。

当然效率不高:)

答案 1 :(得分:2)

尝试以下方法:

re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', some_string)

在另一个问题中建议的正则表达式有点奇怪,因为字符类中的\b表示退格字符。

基本上你现在拥有的是一个正则表达式,用于在开头搜索带有单词边界的目标字符串(从单词字符到非单词字符,反之亦然),最后是一个空白字符。 / p>

由于你不想匹配最后的“本地”,因为它后跟一段时间,我不认为单词边界是这里的方式,而是你应该寻找空格或开头/结尾字符串,这是上面的正则表达式。

我还在变量上使用了re.escape,这样如果您在目标字符串中包含通常具有特殊含义的.$中的字符,它们将被转义和解释作为文字字符。

示例:

>>> s = "-local locally local test local."
>>> variable = 'local'
>>> re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', s)
'-local locally we test local.'
>>> variable = '-local'
>>> re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', s)
'we locally local test local.'

答案 2 :(得分:1)

sed 's/ local / we /g' filename

我不做python,但是这个想法只是在模式的本地之前和之后放置一个空格来查找,并且在替换中也包含空格。

答案 3 :(得分:0)

如果您只想替换由空格分隔的所有单词,您可以拆分字符串并对结果列表进行操作:

search = "local"
replace = "we"
s = "-local locally local test local."
result = ' '.join([x if not x == search else replace for x in s.split(" ")])