如何使用正则表达式拆分字符串中的商标™符号?
用正则表达式拆分字符串中的商标™符号并添加空格
你可以通过正则替换直接实现两种场景的需求,不需要先单独检测再处理,具体方案如下:
方案1:两步替换(直观易理解)
先处理「商标符号后带数字」的场景,再处理「商标符号后无数字」的场景,代码示例(以Python为例):
import re def format_trademark(text): # 处理场景2:string™2 → string ™ 2 text = re.sub(r'([a-zA-Z0-9]+)(™)([0-9])', r'\1 \2 \3', text) # 处理场景1:string™ → string ™ text = re.sub(r'([a-zA-Z0-9]+)(™)(?![0-9])', r'\1 \2', text) return text # 测试 print(format_trademark("string™")) # 输出:string ™ print(format_trademark("string™2")) # 输出:string ™ 2
正则说明:
- 第一个正则捕获三个组:字母数字序列、™、单个数字,替换时在三组之间插入空格;
- 第二个正则用
(?![0-9])正向否定预查,确保™后面没有数字,只在字母数字和™之间插入空格。
方案2:单步替换(用回调函数简化)
如果想一步完成,可以利用正则的捕获组和替换回调函数,自动判断是否需要在™和数字之间加空格:
import re def format_trademark(text): return re.sub( r'([a-zA-Z0-9]+)(™)([0-9]?)', lambda match: f"{match.group(1)} {match.group(2)}{' ' + match.group(3) if match.group(3) else ''}", text ) # 测试 print(format_trademark("string™")) # 输出:string ™ print(format_trademark("string™2")) # 输出:string ™ 2
这个正则捕获了三个组,第三个组是可选的数字,回调函数会判断第三个组是否存在,存在的话就插入空格,不存在则只处理前面的空格。
另外,你之前写的检测正则"[a-zA-Z0-9]+[™]([0-9])?$"可以用来提前过滤需要处理的字符串,避免对无关文本做替换操作。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

