正则表达式的递归排序

问题描述 投票:0回答:2

我正在尝试构建一个正则表达式,要求我像这样过滤字符串:

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+

[如果countryprovincescity是单个单词,这对我有什么帮助

但是如果不是例子

keyword: one two three country:United-States provinces:Manhattan city:New-York zip_code:12345 filter: myparameter

上述reqex只是由于-之类的非文字字符的限制而无法工作>

您可以假设国家,省或城市并有许多-共同加入的词>

like

country:United-States-of-America provinces:Washington-Dc city:New-York-West

等等等...

所以-\w+是一种递归模式,在countryprovincescity或全部中都出现0个或多个

现在我也尝试为类似的东西构建一个正则表达式

(country:\w+(-\w+)*)|(province:\w+(-\w+)*)|(city:\w+(-\w+)*)|(zip_code:\w+(-\w+)*)

尽管这匹配但正如您在表格screenshot中看到的那样,它还显示了未接受的输出,并且nil

我想要的是避免在将所需的字符串与给定的输入字符串分隔开时,在匹配结果中出现问题的non-acceptednil输出,或者有人可以建议我比这更好的正则表达式。

我正在尝试构建一个正则表达式,要求我从以下字符串中过滤字符串:country:India provinces:Uttranchal city:Dehradun zip_code:12345:关键字:一二三...]]

如果要匹配一组一个或多个字母和破折号,则可以使用方括号来表示character set[\w\-]+

country:[\w\-]+|provinces:[\w\-]+|city:[\w\-]+|zip_code:[\w\-]+

Python中的两行示例:

>>> s = "keyword: one two three country:United-States provinces:Manhattan city:New-York zip_code:12345 filter: myparameter"
>>> print re.findall("country:[\w\-]+|provinces:[\w\-]+|city:[\w\-]+|zip_code:[\w\-]+", s)
['country:United-States', 'provinces:Manhattan', 'city:New-York', 'zip_code:12345']

(...)是捕获组。 Ruby(如果您正在使用的话)还支持非捕获组(?:...),所以我认为您想要:

(country:\w+(?:-\w+)*)|(province:\w+(?:-\w+)*)|(city:\w+(?:-\w+)*)|(zip_code:\w+(?:-\w+)*)

甚至:

(country:\w+(?:-\w+)*|province:\w+(?:-\w+)*|city:\w+(?:-\w+)*|zip_code:\w+(?:-\w+)*)

如果您希望它们全部都属于捕获组1。

regex regular-language
2个回答
0
投票

如果要匹配一组一个或多个字母和破折号,则可以使用方括号来表示character set[\w\-]+


0
投票

(...)是捕获组。 Ruby(如果您正在使用的话)还支持非捕获组(?:...),所以我认为您想要:

(country:\w+(?:-\w+)*)|(province:\w+(?:-\w+)*)|(city:\w+(?:-\w+)*)|(zip_code:\w+(?:-\w+)*)
© www.soinside.com 2019 - 2024. All rights reserved.