python - 两个正则表达式之间的区别 : [abc]+ and ([abc])+

标签 python regex

In [29]: re.findall("([abc])+","abc")
Out[29]: ['c']

In [30]: re.findall("[abc]+","abc")
Out[30]: ['abc']

被分组的人搞糊涂了。它有何不同?

最佳答案

这里有两点需要说明:量化组的行为,以及findall()方法的设计。

在您的第一个示例中,[abc] 匹配在第 1 组中捕获的 a。然后它匹配 b 并在组 #1 中捕获它,覆盖 a。然后再次使用 c,这就是比赛结束时留在第 1 组中的内容。

但它确实匹配整个字符串。如果您使用的是 search()finditer(),您将能够查看 MatchObject 并看到 group(0) 包含abcgroup(1) 包含 c。但是 findall() 返回字符串,而不是 MatchObjects。如果没有组,则返回整体匹配列表;如果有组,则列表包含所有捕获,但不是整体匹配。

所以您的两个正则表达式都匹配整个字符串,但第一个正则表达式还单独捕获和丢弃每个字符(这有点毫无意义)。只是 findall() 的意外行为让您看起来得到了不同的结果。

关于python - 两个正则表达式之间的区别 : [abc]+ and ([abc])+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677905/

相关文章:

python - wikipedia.getSite() 的替代品是什么?或者它还能用吗?

python - Django UpdateView 有空表格

python - 搜索一个数组中的特定元素并复制另一数组中的整个相应行

php - 使用正则表达式删除字符串中不需要的字符

mysql - 正则表达式复制粘贴行并在每个行的末尾添加递增的数字

python - 使用“pip install mysql-python”但不起作用,如何修复

python - 如何在Python中四舍五入到最接近的较低 float ?

python - 如何匹配正则表达式中可能存在或不存在但如果匹配项不存在则具有占位符的字符串

javascript - JQuery:在解析 HTML 时防止加载图像

javascript - 用于检查金额的正则表达式大于一