正则表达式匹配多字符串条件:捕获并修剪指定内容咨询
正则表达式解决方案:修剪末尾附加数据/保留纯文本
需求说明
需要处理两类字符串:
- 第一类:修剪掉末尾的附加数据(如示例中括号内的人员信息)
- 第二类:直接保留原纯文本
示例输入
Review / Sign Changes (Doe,John Howard - 555-00-5555) City & State for Current Visit
尝试的正则表达式(存在语法错误)
(?\<Group1\>(?:(.) ())|.* (?\<Group1\>*.\[a-zA-Z\] )|(.*)
期望输出
Review / Sign Changes City & State for Current Visit
正确解决方案
可以用这个简洁的正则表达式匹配并提取目标内容:
^(.+?)(?:\s*\(.*\))?$
正则解释
^:匹配行的起始位置(.+?):非贪婪捕获任意字符(这就是我们要保留的核心文本)(?:\s*\(.*\))?:可选的非捕获组,匹配末尾的空格+括号及括号内所有内容;?表示这部分内容可有可无$:匹配行的结束位置
使用方式
在支持正则替换的工具/语言中,直接提取捕获组1的内容即可。比如在Python中:
import re text = """Review / Sign Changes (Doe,John Howard - 555-00-5555) City & State for Current Visit""" result = [re.sub(r'^(.+?)(?:\s*\(.*\))?$', r'\1', line) for line in text.split('\n')] print('\n'.join(result))
如果使用命名捕获组(部分正则引擎支持),可以写成:
^(?<Group1>.+?)(?:\s*\(.*\))?$
提取时调用命名组Group1的内容即可。
内容的提问来源于stack exchange,提问作者user1683760
相关产品推荐
相关产品推荐

