如何在python正则表达式中搜索多个条件?

时间:2015-04-06 21:02:40

标签: python regex

我正在为DnD需求编写帮助脚本,脚本的一部分应该接受整数或骰子符号。后者的格式为

1d20+4

我可以用自然数替换120,用任何整数替换+4。输入可能看起来像

hit +3 damage 1d8+1 hp 3d6+2

我使用re将其拆分为两个列表。问题是当我试图检测死亡和数字时。我知道要检测一个我需要使用的数字

re.listall('[\+\-][0-9]*',input_line)

并检测我需要搜索的骰子

re.listall('[0-9]*d[0-9]*',input_line)

而且我非常肯定要搜索我需要的奖金

re.listall('[0-9]*d[0-9]*[\+\-][0-9]*',input_line)

但是,我无法弄清楚如何搜索两者的组合。我将它们放在括号中,即

re.listall('([\+\-][0-9]*)([0-9]*d[0-9]*)',input_line)

但是,我收到错误sre_constants.error: unbalanced parenthesis

让我感到困惑。我怎么能克服这个?

2 个答案:

答案 0 :(得分:1)

我认为你需要的是这个正则表达式:

re.findall('((\d+d\d+)?[\+-]\d+)', input_line)

作为旁注,您可以使用\d代替[0-9]。因此,第二部分与您的代码中的相同。第一部分'(\d+d\d+)?'是可选的(因为?)并匹配数字后跟字母d后跟数字。

在您的示例(hit +3 damage 1d8+1 hp 3d6+2)中,这将匹配+31d8+13d6+2

答案 1 :(得分:1)

您可以使用re.findall()注意来跟随正则表达式,因为您的模式中肯定有一个数字,您可以将\d{1,}放在单词字符和{{的组合中1}}:

+-

Regular expression visualization

Debuggex Demo