问题:
今天在用正则处理一段字符串的时候出现一个问题,字符内容是这样的: try{...}catch(e){},(省略号表示省略了其中的内容)。我想取出try里面的内容,可以用特殊字符(.*)来实现。
具体代码如下。在这个正则表达式x中,'()'标记一个子表达式的开始和结束位置, '.' 匹配除换行符 \n 之外的任何单字符, '*'匹配前面那个字符0次或任意多次。因此,try{(.*)}catch(e){}表示匹配'try{'和'}catch(e){}'之间的所有除了\n的字符。但是这样运行会出错:
s = 'try{00000000}catch(e){}'
x = r'try{(.*)}catch(e){}'
ss = re.findall(x,s)
print(ss)
结果返回值为None.
解决:
问题是由正则表达x中出现了(e)导致的,这里的(e)会和(.*)一起作用,导致s中不存在x对应的内容。在正则表达式中,()是特殊字符,在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。具体解决办法如下:
x = r'try{(.*)}catch\(e\){}'
ss = re.findall(x,s)
print(ss)
返回值为'00000000'