繁体   English   中英

用 Python 中的字符串替换包含子字符串的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM