繁体   English   中英

尝试使用正则表达式查找后跟空格或破折号的所有数字

[英]trying to find all digits that are followed by either a whitespace or a dash using regex

我正在尝试使用正则表达式查找后跟空格或破折号的所有数字

现在帽子的样子:

import re

txt = "123 4 56-7 maine x1s56"

x = re.findall(r"\d+\s|-\b)", txt)

print(x)

结果是:

['123 ', '4 ', '-', '7 ']

但它应该打印:


['123 ', '4 ', '56', '7 ']

从预期的 output 看来,数字后面的空格必须保留,连字符/减号不应该。

在这种情况下,您需要使用

import re
txt = "123 4 56-7 maine x1s56"
x = re.findall(r"\d+(?:\s|(?=-))", txt)
print(x) # => ['123 ', '4 ', '56', '7 ']

请参阅Python 演示

详情

  • \d+ - 一位或多位数字
  • (?:\s|(?=-)) - 匹配的非捕获组
    • \s - 一个空格
    • | - 或者
    • (?=-) - 一个 position 紧跟-

请参阅正则表达式演示

交替运算符 ( | ) 在所有正则表达式运算符中具有最低优先级。 也就是说,它告诉正则表达式引擎匹配垂直条左侧的所有内容或垂直条右侧的所有内容

所以正则表达式r"\d+\s|-\b)"表示(一个或多个数字后跟一个空格)或(一个破折号后跟一个单词边界)。

如果要限制交替的范围,则需要使用括号进行分组。 或者,由于您只想在两个字符之间交替,您可以使用字符 class 代替。

import re

txt = "123 4 56-7 maine x1s56"
x = re.findall(r"\d+[\s-]", txt)
print(x)

Output:

['123 ', '4 ', '56-', '7 ']

所以,棘手的部分是空格和连字符都是匹配的一部分,但只有空格被包含在匹配中。 您需要在前瞻中使用连字符,但在外部需要空格,如下所示:

\d+(\s|(?=-))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM