python:用减号替换精确
给定以下字符串:python:用减号替换精确,python,regex,Python,Regex,给定以下字符串: "-local locally local test local." 我的目标是将字符串“local”替换为“we”,从而使结果变为 "-local locally we test local." 到目前为止(在stackoverflow的帮助下:)我已经能够得到以下正则表达式: variable='local' re.sub(r'\b%s([\b\s])' %variable, r'we\1', "-local locally local test local.") 但
"-local locally local test local."
我的目标是将字符串“local”替换为“we”,从而使结果变为
"-local locally we test local."
到目前为止(在stackoverflow的帮助下:)我已经能够得到以下正则表达式:
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.'
可以使用空格作为分隔符将字符串分隔为子字符串。然后检查每个字符串,如果它与您要查找的匹配,则替换它,然后重新组合它们
当然效率不高:)您可以使用空格作为分隔符将字符串分隔成子字符串。然后检查每个字符串,如果它与您要查找的匹配,则替换它,然后重新组合它们 当然效率不高:)尝试以下方法:
re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', some_string)
另一个问题中建议的正则表达式有点奇怪,因为character类中的\b
表示退格字符
基本上,您现在拥有的是一个正则表达式,它搜索目标字符串,在开始处有一个单词边界(从单词字符到非单词字符,反之亦然),在结束处有一个空白字符
因为你不想匹配最后的“local”,因为它后面有一个句点,我不认为单词边界是这里的方法,相反,你应该寻找空白或字符串的开头/结尾,这就是上面正则表达式所做的
我还在变量上使用了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.'
请尝试以下操作:
re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', some_string)
另一个问题中建议的正则表达式有点奇怪,因为character类中的\b
表示退格字符
基本上,您现在拥有的是一个正则表达式,它搜索目标字符串,在开始处有一个单词边界(从单词字符到非单词字符,反之亦然),在结束处有一个空白字符
因为你不想匹配最后的“local”,因为它后面有一个句点,我不认为单词边界是这里的方法,相反,你应该寻找空白或字符串的开头/结尾,这就是上面正则表达式所做的
我还在变量上使用了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.'
我不做python,但我的想法是在模式中查找local之前和之后放置一个空格,并在替换中包含空格
我不使用python,但我的想法是在模式中的local前后放置一个空格来查找,并在替换中包含空格。如果您只想替换所有以空格分隔的单词,您可以拆分字符串并对结果列表进行操作:
search = "local"
replace = "we"
s = "-local locally local test local."
result = ' '.join([x if not x == search else replace for x in s.split(" ")])
如果您只想替换所有以空格分隔的单词,可以拆分字符串并对结果列表进行操作:
search = "local"
replace = "we"
s = "-local locally local test local."
result = ' '.join([x if not x == search else replace for x in s.split(" ")])
如果输入数据只有几千行,并且比正则表达式可读性更好,那么这就足够了。在代码中:
“”.join(“如果p==“local”则为we,否则在s.split()中p为p”)
如果输入数据只有几千行,并且比正则表达式可读性更好。在代码中:“”.join(“如果p==“local”,则为we”在s.split()中,否则p代表p
+1但对于以local开头的行,此操作失败,您需要另一个sed的/^local/we/g”文件名来完成此操作。l4mpi:我意识到我的解决方案可能过于具体。我试图解决所提出的问题,因为不清楚他是否希望替换行开头的local(特别是因为他没有替换local.
中的local
)。希望在我们两人之间,他能找到他想要的东西。:)+1但对于以local开头的行,此操作失败,您需要另一个sed的/^local/we/g”文件名来完成此操作。l4mpi:我意识到我的解决方案可能过于具体。我试图解决所提出的问题,因为不清楚他是否希望替换行开头的local(特别是因为他没有替换local.
中的local
)。希望在我们两人之间,他能找到他想要的东西。:)这管用!但哪一个更有效,还是F的解决方案更有效。J@alandalusi正则表达式效率更高,但如果输入量不大,我会定期使用这样的代码;e、 g.对于一个~100k行的csv文件,你可能不会注意到现代pc上的差异。这很有效!但哪一个更有效,还是F的解决方案更有效。J@alandalusi正则表达式效率更高,但如果输入量不大,我会定期使用这样的代码;e、 g.对于~100k行的csv文件,您可能不会注意到现代pc上的差异。为什么您不能用'we'
切换出'local'
?为什么您不能用'we'
切换出'local'
?