如何用正则表达式提取+分隔的所有分段(含空分段)
解决方案
你之前用的正则[A-Za-z0-9\ß\p{L}&.-]思路完全错误——它只能匹配单个符合规则的字符,既没法覆盖原字符串里的冒号、空格等内容,更提取不了空分段。正确的做法是直接按+作为分隔符处理,或者用正则匹配所有+分隔的片段(包括空)。
方法1:用语言自带的字符串分割函数(推荐)
几乎所有编程语言都提供了按指定字符分割字符串的方法,这类方法会自动保留连续分隔符产生的空分段:
Python
s = "NAD+DP+++Test GmbH & Co. KG:Filiale Test:Test+Groß Test Straße 96-98+Berlin++13452+DE'" segments = s.split('+') # 结果:['NAD', 'DP', '', '', 'Test GmbH & Co. KG:Filiale Test:Test', 'Groß Test Straße 96-98', 'Berlin', '', '13452', "DE'"]
JavaScript
const s = "NAD+DP+++Test GmbH & Co. KG:Filiale Test:Test+Groß Test Straße 96-98+Berlin++13452+DE'"; const segments = s.split('+'); // 结果和Python一致,包含所有空分段
Java
String s = "NAD+DP+++Test GmbH & Co. KG:Filiale Test:Test+Groß Test Straße 96-98+Berlin++13452+DE'"; String[] segments = s.split("\\+", -1); // 第二个参数-1表示保留末尾的空分段
方法2:正则匹配(适合只能用正则的场景)
如果必须用正则提取,可以用这个模式匹配所有+分隔的片段(包括空):
[^+]*(?=\+|$)
它的逻辑是:匹配任意数量的非+字符(包括0个,对应空分段),后面紧跟+或者字符串结尾。
比如用Python的re.findall:
import re s = "NAD+DP+++Test GmbH & Co. KG:Filiale Test:Test+Groß Test Straße 96-98+Berlin++13452+DE'" segments = re.findall(r'[^+]*(?=\+|$)', s)
内容的提问来源于stack exchange,提问作者bastian
相关产品推荐
相关产品推荐

