给出以下字符串:
"-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.")
但是我对这段代码有两个问题:
搜索经过减号,输出变为:
'-we locally we test local.'
应该在哪里
'-local locally we test local.'
搜索以减号开头的字符串,例如“-local”,搜索失败
答案 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(" ")])