首页
学习
活动
专区
圈层
工具
发布

Regex比
EN

Stack Overflow用户
提问于 2015-09-08 08:18:53
回答 1查看 31关注 0票数 1

我有以下的Regex:

代码语言:javascript
复制
(?<day>\d+). Tag, (?<way>.+)?( \((?<length>\d+?.?\d?)km\))?

我想把这三种可能性结合起来:

代码语言:javascript
复制
1. Tag, Berlin -> London (500.3km)
2. Tag, London -> Stockholm (183km)
3. Tag, Stockholm (day of rest)

问题是:它不再匹配长度了。如果我去掉这方面的疑问:

代码语言:javascript
复制
(?<day>\d+). Tag, (?<way>.+)( \((?<length>\d+?.?\d?)km\))

它与第一个和第二个匹配,而不是第三个。我想我可以通过在结尾加上问号来解决这个问题。但最后一个表达变成了懒惰。因此,我在way-表达式中添加了另一个问号,但它不会比最后一个更懒惰。因此,方法是匹配整个长度也!

那么,是否可以定义不同程度的懒散呢?如果不存在这种情况,我应该如何改变模式来匹配它呢?

朱利安

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 08:34:53

下面是一种匹配输入中所有预期元素的方法:

代码语言:javascript
复制
(?<day>\d+)\.\s+Tag,\s+(?<way>(?:[^()]|\((?!\d+(?:\.\d+)?km)[^()]*\))*?)(?:$|\s*(?<length>\(\d+(?:\.\d+)?km\)))

请参阅演示

您可以将不包含括号结构的整个way匹配,也可以将它们与不具有整数或浮点数的结构直接匹配到km之后。只有在存在的情况下才能匹配长度。还请注意,必须转义文字点(\.)。

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

https://stackoverflow.com/questions/32452657

复制
相关文章

相似问题

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