我可能不会这么说(我是一个完整的正则表达新手)。这是我目前的代码:
bugs.append(re.compile("^(\d+)").match(line).group(1))
我想添加到正则表达式,因此它会查看'\ d +'(以数字开头)或以2个大写字母开头,并在第一个空格之前包含' - '。我有大写字母的正则表达式:
^[A-Z]{2,}
但是我不确定如何添加' - '并使用\ d +创建一个OR。这有意义吗?谢谢!
答案 0 :(得分:1)
将|
写为“或”。对于零个或多个非空白字符的序列,请写\S*
。
re.compile('^(\d+|[A-Z][A-Z]\S*-\s)')
答案 1 :(得分:1)
在regexp中执行OR的方法是使用“alternation”或“pipe”运算符|
。
例如,要匹配一个或多个数字,或两个或多个大写字母:
^(\d+|[A-Z]{2,})
您有时可能需要添加/删除/移动括号以获得优先权。我编写它的方式,你有一个组可以捕获数字字符串或大写字母。当你学习规则时(事实上,即使你已经学会了规则),查看正则表达式可视化器/调试器就像我使用的一样。
您的规则稍微复杂一些:您需要2个或更多大写字母,以及第一个空格前的连字符。这有点难以按原样编写,但如果将其更改为两个或更多大写字母,零个或多个非空格字符以及连字符,则很容易:
^(\d+|[A-Z]{2,}\S*?-)
(注意\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