正则表达式匹配小括号内的内容:为何 re.findall() 函数结果不同?

正则表达式匹配小括号内的内容:为何 re.findall() 函数结果不同?

正则表达式匹配小括号中的差异

正如问题所述,使用 re.findall() 函数匹配小括号时,会产生不同的结果。这是由于正则表达式中是否包含捕获组所致。

第一个正则表达式 sin(.+?) 仅包含一个捕获组,用于匹配括号内的内容。因此,re.findall() 函数返回了一个列表,其中包含匹配到的括号内的内容,即 ['30']。

第二个正则表达式 (cos|sin|tan|arcsin|arccos|arctan)(.+?) 包含了多个捕获组:括号外的捕获组捕获了三角函数名称,括号内的捕获组捕获了括号内的内容。当正则表达式匹配成功时,re.findall() 函数将返回一个列表,其中包含每个捕获组的内容。由于非捕获组不会返回任何内容,因此第二个正则表达式返回的结果中不会包含括号。

为了解决这个问题,可以将第二个正则表达式中括号外的捕获组替换为非捕获组形式:(?:cos|sin|tan|arcsin|arccos|arctan)。非捕获组使用 (?:) 来表示,它不会捕获匹配到的内容。

这样修改后的正则表达式将匹配出相同的括号内内容,但不会包含括号本身:

trigonometric_functions = re.compile(r'(?:cos|sin|tan|arcsin|arccos|arctan)(.+?)', re.DOTALL)
print(re.findall(trigonometric_functions, 'sin(30)'))
# Output: ['30']

以上就是正则表达式匹配小括号内的内容:为何 re.findall() 函数结果不同?的详细内容,更多请关注硕下网其它相关文章!