正则表达式匹配小括号时出现的问题?

正则表达式匹配小括号时出现的问题?

import re

my_sin = re.compile(r'sin\(.+?\)', re.DOTALL)

print(re.findall(my_sin, 'sin(30)'))

trigonometric_functions = re.compile(r'(cos|sin|tan|arcsin|arccos|arctan)\(.+?\)', re.DOTALL)

print(re.findall(trigonometric_functions, 'sin(30)'))

请问这两个函数有什么区别吗?为什么上面的匹配出来有括号,下面的就没了?感觉是 (cos|sin|tan|arcsin|arccos|arctan) 这一部分的问题?


回答:

python的findall函数,正则中不含有捕获组时,返回匹配结果的列表
含有捕获组时,返回捕获组内容的列表
上式的括号可以用非捕获组形式
(?:cos|sin|tan|arcsin|arccos|arctan)


回答:

是因为你括号的原因

补充1L的回答,也可以使用search替代findall

>>> trigonometric_functions = re.compile(r'(cos|sin|tan|arcsin|arccos|arctan)\(.+?\)', re.DOTALL)

>>> res = re.search(trigonometric_functions, 'sin(30)')

>>> res

<re.Match object; span=(0, 7), match='sin(30)'>

>>> res.group()

'sin(30)'


回答:

trigonometric_functions = re.compile(r'(?:cos|sin|tan|arcsin|arccos|arctan)\(.+?\)', re.DOTALL)

print(re.findall(trigonometric_functions, 'sin(30)'))

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

以上是 正则表达式匹配小括号时出现的问题? 的全部内容, 来源链接: utcz.com/p/938797.html

回到顶部