我想要匹配:
!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'
答案 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+