如何使用正则提取被*、&等特殊字符包裹的字符串内容
解决方案
你可以使用Python的re模块实现需求,核心是利用非贪婪匹配捕获成对符号中间的内容,方案可通用适配不同输入字符串。
单类型符号单独提取示例
import re input_str = "hi i am *hadi* and i have &18& year old" # 提取*成对包裹的内容 name = re.search(r'\*(.*?)\*', input_str).group(1) # 提取&成对包裹的内容 age = re.search(r'&(.*?)&', input_str).group(1) print(name, age)
运行输出:
hadi 18
一次性提取所有两类符号包裹的内容
如果需要同时提取所有符合规则的内容,可使用以下写法:
import re input_str = "hi i am *hadi* and i have &18& year old" result = re.findall(r'[*&](.*?)[*&]', input_str) print(result) # 输出:['hadi', '18']
规则说明
- 正则中的
\*、&用来匹配对应的包裹符号,*属于正则特殊字符需要加反斜杠转义 .*?是非贪婪匹配,可避免同个字符串存在多对同符号时出现跨配对匹配的错误- 如果需要支持匹配带换行的内容,可以给方法增加
re.DOTALL参数,比如re.search(r'\*(.*?)\*', input_str, re.DOTALL) - 兼容无匹配场景避免报错,可增加非空判断,示例:
name_match = re.search(r'\*(.*?)\*', input_str) name = name_match.group(1) if name_match else ''
内容的提问来源于stack exchange,提问作者HadiH2o
相关产品推荐
相关产品推荐

