我需要匹配一个特定的模式
(?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d)例如:
dk30344510
dk30 34 45 10
30344510
30 34 45 10但是,我还需要在模式之前获取“前缀”字符串。
这是我的解决方案,但并不总是奏效
^(.*)(?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d)很难解释,所以在这里查查。
https://regex101.com/r/fM1xD3/2
它太“贪婪”,并且匹配字符串中的多个模式。实际匹配在这里,是第二次匹配的“前缀”的一部分。
该示例应该输出两个匹配项。一个带有dk30344510和62226420
该示例应该输出CVR-nr.作为前缀,dk30344510作为模式,第二个匹配应该是/ Tlf.作为前缀,62226420作为模式。
发布于 2016-09-14 10:03:10
您的正则表达式没有输出预期的结果,因为您有字符串锚点^和贪婪点.*的启动。这意味着它只从字符串的开始开始,并且仅以一个成功的匹配结束。
溶液
Regex:
\s*(.*?)\s*\b((?i:dk)?(?:\d{2}\D?){3}\d{2})\b我没有对您的主regex进行太多更改。我所做的是减少重复模式\d{2}\D?,并用word边界\b令牌替换外观。
发布于 2016-09-14 10:22:02
https://stackoverflow.com/questions/39486915
复制相似问题