我该如何在Python中写这个正则表达式

2024-09-27 18:00:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有绳子。在

st = "12345 hai how  r u @3456? Awer12345 7890"
re.findall('([0-9]+)',st)

它不应该是这样的:

^{pr2}$

我应该得到

['12345','7890']

我应该只取数值

以及

它不应该包含任何其他字符,如字母表,特殊字符


Tags: re字符字母表how数值st绳子hai
3条回答
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)

还有一个解释:

^{pr2}$

一些例子:

>>> 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()]

我认为这比使用正则表达式更具可读性

相关问题 更多 >

    热门问题