正则表达式匹配不同位置的2个相同的字符类

时间:2012-11-23 13:49:28

标签: python regex

如果我可以将一些正则表达式压缩成单个正则表达式,我试图解决这个问题,但是不能完全实现。

我正在尝试寻找匹配的一对字符,这些字符可以是一个范围内的字符。

例如

1 text 1     <--- This is a match
1 text 2     <--- This is not a match
2 text 1     <--- This is a match

选项列表是有限的,所以我知道我可以单独测试每个案例,例如:

1(.+?)1
2(.+?)2

但是,我试图在一个查询中使用分组来执行此操作。有点像:

[1-8](.+?)[1-8]

但这(错误地)匹配:

1 text 2     <--- This is not a match

有没有办法可以确保第二个括号内列表匹配与第一个括号中的匹配相同?即如果第一个匹配1,那么第二个也必须是1?

2 个答案:

答案 0 :(得分:3)

您需要使用群组,然后引用该群组

([1-8])(?:.+?)\1

\1first个被捕获的群组,即([1-8])

答案 1 :(得分:2)

您想使用back reference

([1-8])(.+?)\1

这样,前后角色必须匹配才能被视为匹配。