首页 > 解决方案 > 元字符和反斜杠在这里做什么?

问题描述

我正在从某个网站学习正则表达式,但在理解元字符的用法和原始字符串中反斜杠的用法时遇到了一些麻烦。

import re

pattern = r"(.+) \1"

match = re.match(pattern, "word word")   
if match:
   print ("Match 1")

match = re.match(pattern, "?! ?!")
if match:
   print ("Match 2")    

match = re.match(pattern, "abc cde")
if match:
   print ("Match 3")

我的主要疑问是这里使用 (.+) 和使用的反斜杠。如果不是 1 而是 2,输出会是什么?我知道 + 的意思是“一个或多个重复”。

标签: pythonregex

解决方案


当你这样做时:

r"(.+) \1"

意味着\1应该与第一组准确捕获的内容相匹配。它不匹配"abc cde",因为第一组捕获abc了,所以就像你匹配这个: re.match(r'abc abc', text)。这叫回引用一个组。

例如,您需要匹配以相同字母开头的文本:

import re

pattern = r"(\w).+\1"

match = re.match(pattern, "ABA")  # OK
match = re.match(pattern, "ABC")  # NO

另一个示例以相反的顺序匹配以 3 个字母开头并以此字母结尾的文本

import re

pattern = r"(\w)(\w)(\w)\3\2\1"
re.match(pattern, 'ABCCBA') # OK
re.match(pattern, 'ABCCBC') # NO

注意:您只能反向引用一个捕获组,这意味着这是无效 (?:.+) \1的,因为第一个组将匹配并且不捕获任何内容,因此您无法反向引用它。

编辑

  • + 匹配一次或多次,需要至少出现一次
  • * 匹配零次或多次

ca+t match cat, caat , caaat:匹配c后跟至少一个a或多个后跟t.

ca+t match ct, cat , caaaaat: 匹配c后跟零个或多个 a 后跟t


推荐阅读