【发布时间】:2020-01-26 16:10:56
【问题描述】:
我正在尝试构建一个正则表达式,要求我过滤以下字符串:
country:India provinces:Uttranchal city:Dehradun zip_code:12345
来自这样的字符串:
keyword: one two three country:India provinces:Uttranchal city:Dehradun zip_code:12345 filter: myparameter
现在我准备了一个基本的正则表达式:
country:\w+|provinces:\w+|city:\w+|zip_code:\w+
如果country,provinces,city 是单个单词,哪种对我有用
但如果他们不是 例子
keyword: one two three country:United-States provinces:Manhattan city:New-York zip_code:12345 filter: myparameter
由于-等非单词字符的限制,上述reqex不起作用
你可以假设国家、省或城市有很多-加入的消息
喜欢
country:United-States-of-America provinces:Washington-Dc city:New-York-West
等 等等……
所以-\w+ 是一种递归模式,在country、provinces、city 或所有这些中出现0 次或多次
现在我也尝试为类似的东西构建一个正则表达式
(country:\w+(-\w+)*)|(province:\w+(-\w+)*)|(city:\w+(-\w+)*)|(zip_code:\w+(-\w+)*)
这虽然匹配 但正如您在 rubular screenshot attach 中看到的那样,它也提供了不可接受的输出和 nil
我想要的只是避免non-accepted 和nil 输出,当从给定的输入字符串中分离所需的字符串时,这会导致匹配结果出现问题,或者有人可以建议我比这更好的正则表达式。
【问题讨论】:
-
正则表达式不能以直接帮助您的方式工作。如果您正在使用支持正则表达式的编程语言,那么有一些非常简单的解决方案可以解决您想要做的事情。但是,您使用什么语言工作?红宝石?如果您告诉我们,我们可以提供更准确的解决方案。
-
@AndrewMartinez Yes Ruby