我正在为DnD需求编写帮助脚本,脚本的一部分应该接受整数或骰子符号。后者的格式为
1d20+4
我可以用自然数替换1
,20
,用任何整数替换+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
让我感到困惑。我怎么能克服这个?
答案 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
)中,这将匹配+3
,1d8+1
和3d6+2
答案 1 :(得分:1)