用于替换`sre_parse`未见的组

时间:2014-01-26 18:25:46

标签: python regex

我刚刚发现了模块sre_parse

以下代码是否正常处理可用于在匹配中替换的组\g<TEST>是否正常?

import sre_parse

pattern = r"(?P<TEST>test)\s+\w*\g<TEST>"

parsedpattern = sre_parse.parse(pattern)
parsedpattern.dump()

这给出了以下输出,其中所有最后的文字应该是,从我的谦虚的角度来看,确实有一些信息可以提供关于替换的信息。

subpattern 1 
  literal 116 
  literal 101 
  literal 115 
  literal 116 
max_repeat 1 2147483647 
  in 
    category category_space
max_repeat 0 2147483647 
  in 
    category category_word
literal 103 
literal 60 
literal 84 
literal 69 
literal 83 
literal 84 
literal 62

1 个答案:

答案 0 :(得分:0)

没有错误

我在文档中仔细看一下。这是另一个代码。

import sre_parse

pattern = r"(?P<TEST>test)\s+\w*\g<TEST>"

parsedpattern = sre_parse.parse(pattern)
parsedpattern.dump()

print('---')

pattern = r"(?P<TEST>test)\s+\w*(?P=TEST)"

parsedpattern = sre_parse.parse(pattern)
parsedpattern.dump()

这将打印以下输出,我们可以看到该组在第二个模式中看到,但在第一个模式中看不到。

subpattern 1 
  literal 116 
  literal 101 
  literal 115 
  literal 116 
max_repeat 1 2147483647 
  in 
    category category_space
max_repeat 0 2147483647 
  in 
    category category_word
literal 103 
literal 60 
literal 84 
literal 69 
literal 83 
literal 84 
literal 62 
---
subpattern 1 
  literal 116 
  literal 101 
  literal 115 
  literal 116 
max_repeat 1 2147483647 
  in 
    category category_space
max_repeat 0 2147483647 
  in 
    category category_word
groupref 1 

文档说\g<...>可以在传递给repl re.sub()参数的字符串中使用。这肯定是这个替换的功能。

所以我将不得不寻找另一种方式来搜索模式中的\g<...> ...