首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则匹配模式和模式前面的前缀

正则匹配模式和模式前面的前缀
EN

Stack Overflow用户
提问于 2016-09-14 09:26:09
回答 2查看 119关注 0票数 1

我需要匹配一个特定的模式

代码语言:javascript
复制
(?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d)

例如:

代码语言:javascript
复制
dk30344510
dk30 34 45 10
30344510
30 34 45 10

但是,我还需要在模式之前获取“前缀”字符串。

这是我的解决方案,但并不总是奏效

代码语言:javascript
复制
^(.*)(?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d)

很难解释,所以在这里查查。

https://regex101.com/r/fM1xD3/2

它太“贪婪”,并且匹配字符串中的多个模式。实际匹配在这里,是第二次匹配的“前缀”的一部分。

该示例应该输出两个匹配项。一个带有dk3034451062226420

该示例应该输出CVR-nr.作为前缀,dk30344510作为模式,第二个匹配应该是/ Tlf.作为前缀,62226420作为模式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-14 10:03:10

您的正则表达式没有输出预期的结果,因为您有字符串锚点^和贪婪点.*的启动。这意味着它只从字符串的开始开始,并且仅以一个成功的匹配结束。

溶液

Regex:

代码语言:javascript
复制
\s*(.*?)\s*\b((?i:dk)?(?:\d{2}\D?){3}\d{2})\b

我没有对您的主regex进行太多更改。我所做的是减少重复模式\d{2}\D?,并用word边界\b令牌替换外观。

现场演示

票数 2
EN

Stack Overflow用户

发布于 2016-09-14 10:22:02

您可以尝试使用选项'g‘来获得多个结果。

代码语言:javascript
复制
^(.*?)\s(dk\d+)\s(.*?)\s(\d+)

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39486915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档