我目前的正则表达式定义如下:
>>> import re
>>> regex = re.compile("(\d+:)+(\d+)")
>>> search_results = regex.search("52345:54325432:555:443:3:33")
>>> search_results.groups()
('3:', '33')
我知道我能做到
>>> "52345:54325432:555:443:3:33".split(":")
将每个项目拆分为令牌,但我想知道如何使用正则表达式实现此目的。
答案 0 :(得分:1)
如果您希望所有匹配项re.findall
在第一场比赛时停止,请使用re.search
。
>>> strs = "52345:54325432:555:443:3:33"
>>> re.findall(r"(\d+):(\d+)",strs)
[('52345', '54325432'), ('555', '443'), ('3', '33')]
如果您想要与str.split
完全相同的结果,那么您可以这样做:
>>> re.split(r":",strs)
['52345', '54325432', '555', '443', '3', '33']
>>> re.findall(r"[^:]+",strs)
['52345', '54325432', '555', '443', '3', '33']
答案 1 :(得分:0)
看看这是否有帮助......
>>> pat = r'(\d+(?=\:)|\d+$)'
>>> regexp = re.compile(pat)
>>> m = regexp.findall("52345:54325432:555:443:3:33")
>>> m
['52345', '54325432', '555', '443', '3', '33']
>>>
答案 2 :(得分:0)
您应该使用split
来解决此问题。
findall
可以处理任何有效的字符串。不幸的是,它也适用于任何无效的字符串。如果这就是你想要的,那很好;但可能你想知道是否有错误。
示例:
>>> import re
>>> digits = re.compile("\d+")
>>> digits.findall("52345:54325432:555:443:3:33")
['52345', '54325432', '555', '443', '3', '33']
>>> digits.findall("52345:54325.432:555:443:3:33")
['52345', '54325', '432', '555', '443', '3', '33']
>>> digits.findall(""There are 2 numbers and 53 characters in this string."")
['2', '53']
当然,如果您决定只使用re
模块,则可以先匹配然后拆分:
>>> valid = re.compile("(?:\d+:)*\d+$")
>>> digits = re.compile("\d+")
>>> s = "52345:54325432:555:443:3:33"
>>> digits.findall(s) if valid.match(s) else []
相反:
>>> [int(n) for n in "52345:54325432:555:443:3:33".split(":")]
[52345, 54325432, 555, 443, 3, 33]
>>> [int(n) for n in "52345:54325.432:555:443:3:33".split(":")]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '54325.432'
>>> [int(n)
... for n in "There are 2 numbers and 53 characters in this string.".split(":")]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10:
'There are 2 numbers and 53 characters in this string.'
答案 3 :(得分:0)
(?<test>[0-9]+):
这是正则表达式。你需要做的是: 例如你的字符串在str:
var str = "52345:54325432:555:443:3:33";
然后你必须在while循环
中匹配这个字符串和正则表达式while(RegexMatch.Success){
//这里的操作 }
第一个值:即:52345将在:
var first = RegexMatch.Groups["test"].Value;
首次更改。
注意:这不是与Regex等匹配的确切代码,而是伪代码。希望你能理解。我附加图像以显示正则表达式中的组。