如何用Python移除字符串末尾任意数量的Proper Name正则匹配项?
解决方案
核心逻辑
先判断字符串末尾是否为数字,若是则直接返回原字符串;否则,匹配并移除末尾最多2个符合规则的Proper Name。
正则匹配规则
使用以下正则表达式匹配并替换结尾的目标内容:
(?:\s+[A-Z][a-z]+ [A-Z][a-z]+){1,2}$
规则拆解
[A-Z][a-z]+ [A-Z][a-z]+:精准匹配单个符合要求的Proper Name(首字母大写+后续小写字母,空格分隔后再一组首字母大写+后续小写字母)(?:...):非捕获组,用于包裹单个Proper Name的匹配逻辑,避免额外捕获分组{1,2}:指定匹配前面的组1到2次,覆盖末尾1个或2个Proper Name的场景\s+:匹配Proper Name前的一个或多个空格,兼容原字符串中可能的空格分隔情况$:锚定字符串末尾,确保只处理结尾的目标内容
前置判断:末尾为数字不处理
替换前先检查字符串最后一个字符是否为数字(比如通过str[-1].isdigit()这类简单判断),如果是则直接返回原字符串,不执行替换操作。
示例代码(Python)
import re def clean_target_string(s): # 末尾是数字则直接返回原字符串 if s and s[-1].isdigit(): return s # 移除末尾1-2个符合规则的Proper Name match_pattern = r'(?:\s+[A-Z][a-z]+ [A-Z][a-z]+){1,2}$' return re.sub(match_pattern, '', s) # 测试验证 print(clean_target_string("sometext Some Name")) # 输出: sometext print(clean_target_string("sometext Another Namevariation ")) # 输出: sometext print(clean_target_string("sometext Some Name Another Namevariation")) # 输出: sometext print(clean_target_string("sometext 123")) # 输出: sometext 123
内容的提问来源于stack exchange,提问作者Mark Ginsburg
相关产品推荐
相关产品推荐

