Python正则表达式:using或statement

时间:2014-11-25 00:45:02

标签: python regex

我可能不会这么说(我是一个完整的正则表达新手)。这是我目前的代码:

bugs.append(re.compile("^(\d+)").match(line).group(1))

我想添加到正则表达式,因此它会查看'\ d +'(以数字开头)或以2个大写字母开头,并在第一个空格之前包含' - '。我有大写字母的正则表达式:

^[A-Z]{2,}

但是我不确定如何添加' - '并使用\ d +创建一个OR。这有意义吗?谢谢!

3 个答案:

答案 0 :(得分:1)

|写为“或”。对于零个或多个非空白字符的序列,请写\S*

re.compile('^(\d+|[A-Z][A-Z]\S*-\s)')

答案 1 :(得分:1)

在regexp中执行OR的方法是使用“alternation”或“pipe”运算符|

例如,要匹配一个或多个数字,或两个或多个大写字母:

^(\d+|[A-Z]{2,})

Regular expression visualization

Debuggex Demo

您有时可能需要添加/删除/移动括号以获得优先权。我编写它的方式,你有一个组可以捕获数字字符串或大写字母。当你学习规则时(事实上,即使你已经学会了规则),查看正则表达式可视化器/调试器就像我使用的一样。


您的规则稍微复杂一些:您需要2个或更多大写字母,以及第一个空格前的连字符。这有点难以按原样编写,但如果将其更改为两个或更多大写字母,零个或多个非空格字符以及连字符,则很容易:

^(\d+|[A-Z]{2,}\S*?-)

Regular expression visualization

Debuggex Demo

(注意\S*? - 这意味着我们将匹配尽可能少的字符,而不是尽可能多的字符匹配,因此我们只匹配第一个 THIS-IS-A-TEST中的连字符,而不是最后一个。如果你想要另一个连字符,只需删除?。)

答案 2 :(得分:0)

re.compile(r"""
^  # beginning of the line
(?:  # non-capturing group; do not return this group in .group()
 (\d+)  # one or more digits, captured as a group
|  # Or
 [A-Z]{2}  # Exactly two uppercase letters
 \S*  # Any number of non-whitespace characters
 -  # the dash you wanted
)  # end of the non-capturing group
""",
re.X)  # enable comments in the regex