如何调整RegEx,提取公司名时排除末尾的<br>标签?
正则表达式修改方案
问题背景
我从HTML邮件中获取到如下示例字符串:
Abholstellenname (Firmenname, Details): Musterfirma GmbH<br>
当前使用正则表达式(?<=Abholstellenname \(Firmenname, Details\): ).*提取其中的公司名“Musterfirma GmbH”,但匹配结果会包含末尾的<br>标签(转义后的<br>),需要修改正则排除该标签。
修改方案
这里提供三种实用的修改方式:
- 方式一:非贪婪匹配+正向预查
直接调整正则为:
(?<=Abholstellenname \(Firmenname, Details\): ).*?(?=<br>)
.*?是非贪婪模式,会尽可能少地匹配字符;(?=<br>)是正向预查,指定匹配到<br>前就停止,刚好避开末尾的标签。
- 方式二:匹配非
&开头的内容
如果确认公司名里不会包含&字符,可用更简洁的写法:
(?<=Abholstellenname \(Firmenname, Details\): )[^&]+
[^&]+表示匹配任意非&的字符,遇到<br>的开头&就停止,精准提取公司名。
- 方式三:捕获分组提取
若觉得预查语法繁琐,也可以用捕获分组:
Abholstellenname \(Firmenname, Details\): ([^&]+)<br>
使用括号把目标公司名括成捕获组,提取时直接取第一个分组的内容即可。
内容的提问来源于stack exchange,提问作者DerThronprinz
相关产品推荐
相关产品推荐

