python正则表达式可选非捕获空间

时间:2014-07-28 10:53:07

标签: python regex whitespace

我想要匹配:

!argument1 [argument2],其中argument2是可选的。我已经想到了使用第二个可选组,但是我无法忽略参数之间的空格。

regex ="!([a-z] )?\ W(。)"

件: "!测试用例"

"!test"

不匹配: "!试验"

我试图投入一个'(:)'在正则表达式中,使非捕获可选组包含空格但无效,导致以下结果:正则表达式="!([az] )?(:)?\ W(。)"

结果是“引发错误,v#无效表达式”

有些人尝试使用python shell:

>>>  regex="!([a-z]*) ?\W(.*)"
>>> data="!hello dear"
>>> re.search(regex, data).groups()
('hello', 'dear')
>>> data="!hello "
>>> re.search(regex, data).groups()
('hello', '')
>>> data="!hello"
>>> re.search(regex, data).groups()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groups'

2 个答案:

答案 0 :(得分:1)

评论中的正则表达式应满足您的要求!([a-z]+) ?(.*) 你需要一个!然后是一系列字符(你的第一个参数)然后可能有一个空格和另一个捕获组,它可能是空的(如此缺失)或包含空格后面的任何字符

答案 1 :(得分:0)

过于复杂。

import re
e = re.compile("(!?\w+)")
s = "!test ing code"
args = e.findall(s)[0][0]
print args
  

[&#39;!test&#39;,&#39; ing&#39;,&#39; code&#39;]

然后只检查args[0][0] == "!"

我认为这是针对某种类型的机器人,可能是IRC的机器人,可以看看他们。

更容易看看你的命令是否以!开头并在分支到正则表达式解析器之前将其删除。然后你可以捕获\w+