[英]replace a string containing a substring with a string in Python
我需要用另一个字符串替换包含子字符串的字符串。 例如:
biography -> biography
biographical -> biography
biopic -> biography
bio-pic -> biography-pic
I watched a biographical movie -> I watched a biography movie
这里,左边的所有单词都包含bio
,所以整个单词被biography
代替。 我知道string.replace()
函数,但它在这里似乎效果不佳。 我查找了正则表达式,但我不确定re
是否是解决问题的正确库。
使用正则表达式
import re
s = """
biography -> biography
biographical -> biography
biopic -> biography
bio-pic -> biography-pic
I watched a biographical movie -> I watched a biography movie
"""
x = re.sub(r'\b(bio\w*)', 'biography', s)
print(x)
输出
biography -> biography
biography -> biography
biography -> biography
biography-pic -> biography-pic
I watched a biography movie -> I watched a biography movie
import re
search_string = 'bio'
replace_string = 'biography'
vals = ['biography', 'biographical', 'biopic', 'bio-pic', 'something else', 'bio pic', 'I watched a biographical movie']
altered = [re.sub(re.escape(search_string)+r'\w*',replace_string,val) for val in vals]
print(altered)
产出
['biography', 'biography', 'biography', 'biography-pic', 'something else', 'biography pic', 'I watched a biography movie']
对于正则表达式部分,可以使用re.escape()
将变量转换为正则表达式。 我假设您'bio'
搜索字符串不会保持不变。 它的其余部分\w*
表示匹配前面字符的 0 个或多个( *
)。 \w
表示单词字符(az、AZ、0-9 和 _)。 因为我们只匹配单词字符,所以当遇到空格时它会停止匹配。
尝试正则表达式来解决这个问题。 一定会的。 您可以根据需要更改正则表达式。 这是一个示例代码
import re
s = "biography biographical biopic bio-pic I watched a biographical movie"
replaced = re.sub('(bio[A-Za-z]*)', 'biography', s)
print (replaced )
其中一项决定:
import re
def f(s, pat, replace):
pat = r'(\w*%s\w*)' % pat
return re.sub(pat, "biography", s)
input = """
biography -> biography
biographical -> biography
biopic -> biography
bio-pic -> biography-pic
I watched a biographical movie -> I watched a biography movie
"""
c = f(input, "bio", "biography")
print(c)
输出:
biography -> biography
biography -> biography
biography -> biography
biography-pic -> biography-pic
I watched a biography movie -> I watched a biography movie
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.