![](/img/trans.png)
[英]Python replace a string using re.sub only if prefix and suffix matches
[英]How to replace a word suffix using re.sub() in Python?
如果我有一段文字并且想用任何东西替换“ion”或“s”,只保留单词的 rest(所以如果这个词是反射,它应该 output 反映),我将如何 Z34D1F91FB2E5514B856BZAFC1? 我努力了:
new_llw = re.sub(r'[a-z]+ion', "", llw)
print(new_llw)
它替换了整个单词,我试过了
if re.search(r'[a-z]+ion', "", llw) is True:
re.sub('ion', '', llw)
print(llw)
这给了我和错误
TypeError: unsupported operand type(s) for &: 'str' and 'int'
对于ion
置换,您可以使用积极的后视:
inp = "reflection"
output = re.sub(r'(?<=\w)ion\b', '', inp)
print(output) # reflect
TypeError: unsupported operand type(s) for &: 'str' and 'int'
错误是由于您使用re.search(r'[az]+ion', "", llw)
like re.sub
. re.search
的第二个参数是输入字符串,它是空的,第三个参数是标志,这些标志是用特定的正则表达式选项(如re.A
或re.I
)设置的,可能会呈现按位掩码( re.A | re.I
。我)。
现在,如果您需要匹配一个ion
作为单词中的后缀,您可以使用
new_llw = re.sub(r'\Bion\b', '', llw)
在这里, \B
匹配紧跟在单词 char (字母、数字或连接符标点符号,如_
)之前的位置,然后ion
匹配ion
并且\b
匹配位于字符串末尾或紧随其后的位置一个非单词字符。
还要匹配一个s
后缀:
new_llw = re.sub(r'\B(?:ion|s)\b', '', llw)
(?:...)
是一个非捕获组。
请参阅正则表达式演示。
变化
如果您仅将单词视为字母序列,则可以使用
new_llw = re.sub(r'(?<=[a-zA-Z])(?:ion|s)\b', '', llw) # ASCII only version
new_llw = re.sub(r'(?<=[^\W\d_])(?:ion|s)\b', '', llw) # Any Unicode letters supported
在这里, (?<=[a-zA-Z])
匹配紧接在 ASCII 字母前面的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.