如果要匹配一组一个或多个字母和破折号,则可以使用方括号来表示character set:[\w\-]+
我正在尝试构建一个正则表达式,要求我像这样过滤字符串:
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只是由于-
之类的非文字字符的限制而无法工作>
您可以假设国家,省或城市并有许多-
共同加入的词>
like
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+)*)
尽管这匹配但正如您在表格screenshot中看到的那样,它还显示了未接受的输出,并且nil
我想要的是避免在将所需的字符串与给定的输入字符串分隔开时,在匹配结果中出现问题的non-accepted
和nil
输出,或者有人可以建议我比这更好的正则表达式。
我正在尝试构建一个正则表达式,要求我从以下字符串中过滤字符串: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。
如果要匹配一组一个或多个字母和破折号,则可以使用方括号来表示character set:[\w\-]+
(...)
是捕获组。 Ruby(如果您正在使用的话)还支持非捕获组(?:...)
,所以我认为您想要:
(country:\w+(?:-\w+)*)|(province:\w+(?:-\w+)*)|(city:\w+(?:-\w+)*)|(zip_code:\w+(?:-\w+)*)