2024-09-27 18:00:58 发布
网友
我有绳子。在
st = "12345 hai how r u @3456? Awer12345 7890" re.findall('([0-9]+)',st)
它不应该是这样的:
我应该得到
['12345','7890']
我应该只取数值
以及
它不应该包含任何其他字符,如字母表,特殊字符
In [21]: re.findall(r'(?:^|\s)(\d+)(?=$|\s)', st) Out[21]: ['12345', '7890']
在这里
(?:^|\s)
(\d+)
(?=$|\s)
Corey的解决方案确实是正确的解决方案,但由于问题确实涉及到regex,因此我认为这里有一个比其他解决方案更简单的regex解决方案:
re.findall(r'(?<!\S)\d+(?!\S)', st)
还有一个解释:
一些例子:
>>> re.findall(r'(?<!\S)\d+(?!\S)', '12345 hai how r u @3456? Awer12345 7890') ['12345', '7890'] >>> re.findall(r'(?<!\S)\d+(?!\S)', '12345 hai how r u @3456? Awer12345 7890123ER%345 234 456 789') ['12345', '234', '456', '789']
无需使用正则表达式:
[i for i in st.split(" ") if i.isdigit()]
我认为这比使用正则表达式更具可读性
在这里
(?:^|\s)
是一个与字符串开头或空格匹配的非捕获组。在(\d+)
是匹配一个或多个数字的捕获组。在(?=$|\s)
是一个前瞻断言,它匹配字符串或空格的结尾,而不使用它。在Corey的解决方案确实是正确的解决方案,但由于问题确实涉及到regex,因此我认为这里有一个比其他解决方案更简单的regex解决方案:
还有一个解释:
^{pr2}$一些例子:
无需使用正则表达式:
我认为这比使用正则表达式更具可读性
相关问题 更多 >
编程相关推荐