如何用Python正则按'y '或'y)'拆分并重组((PERS))标签内容
处理((PERS))标签内的人名拆分需求
需求说明
需要对((PERS))标签内的内容进行拆分:
- 当标签内存在“y ”或“y)”时,将“y”或“y ”移出标签
- 剩余内容分别放入独立的
((PERS))标签中
尝试的代码
import re # 示例1 input_text = "((PERS) Marcos Sy y) ((PERS) Lucy) estuvieron ((VERB) jugando) sdds" # 示例2 # input_text = "ashsahghgsa ((PERS) María y Rosa ds) son alumnas de esa escuela y juegan juntas" input_text = re.sub( r"\(\(PERS\)" + r"((?:\w\s*)+(?:\sy\s(?:\w\s*)+)+)(?=\s*y\s*(?:\)|\())", lambda m: (f"((PERS)){m[1].replace(' y', ') y ((PERS)')}"), input_text, re.IGNORECASE) print(input_text)
期望输出
# 示例1输出 "((PERS) Marcos Sy) y ((PERS) Lucy) estuvieron ((VERB) jugando) sdds" # 示例2输出 "ashsahghgsa ((PERS) María) y ((PERS) Rosa ds) son alumnas de esa escuela y juegan juntas"
解决方案
通过两个正则替换步骤覆盖两种场景:
import re def split_pers_tags(text): # 处理标签内用y分隔的人名(如 ((PERS) A y B) → ((PERS) A) y ((PERS) B)) text = re.sub(r'\(\(PERS\)\s*(.*?)\s*y\s*(.*?)\s*\)', r'((PERS) \1) y ((PERS) \2)', text, flags=re.IGNORECASE) # 处理标签末尾带y,后续紧跟另一个((PERS))标签的情况(如 ((PERS) A y) ((PERS) B) → ((PERS) A) y ((PERS) B)) text = re.sub(r'\(\(PERS\)\s*(.*?)\s*y\s*\)\s*\(\(PERS\)\s*(.*?)\s*\)', r'((PERS) \1) y ((PERS) \2)', text, flags=re.IGNORECASE) return text # 测试示例1 input1 = "((PERS) Marcos Sy y) ((PERS) Lucy) estuvieron ((VERB) jugando) sdds" print(split_pers_tags(input1)) # 测试示例2 input2 = "ashsahghgsa ((PERS) María y Rosa ds) son alumnas de esa escuela y juegan juntas" print(split_pers_tags(input2))
运行结果
((PERS) Marcos Sy) y ((PERS) Lucy) estuvieron ((VERB) jugando) sdds ashsahghgsa ((PERS) María) y ((PERS) Rosa ds) son alumnas de esa escuela y juegan juntas
正则说明
- 第一个正则:匹配
((PERS) 内容1 y 内容2 )的结构,将其替换为((PERS) 内容1) y ((PERS) 内容2) - 第二个正则:匹配
((PERS) 内容 y ) ((PERS) 内容2 )的结构,将其替换为((PERS) 内容) y ((PERS) 内容2)
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

