您是否可以在正则表达式组中进行动态命名?像
这样的东西reg = re.compile(r"(?PText|Or|Something).*(?PTextIWant)")
r = reg.find("TextintermingledwithTextIWant")
r.groupdict()["Text"] == "TextIWant"
因此,取决于开头的内容,分组[“Text”] == TextIWant
更新以使quesetion更清晰。
答案 0 :(得分:1)
你的问题措辞有点搞笑,但我认为你所寻找的是一个非捕获组。像这样:
(?:Must_Match_This_First)What_You_Want(?:Must_Match_This_Last)
?:
是指群组匹配但不捕获的原因。
答案 1 :(得分:1)
一些正则表达式引擎支持这一点,有些则不支持。 This site说Perl,Python,PCRE(以及PHP)和.NET都支持它,所有语法略有不同:
+--------+----------------------------+----------------------+------------------+
| Engine | Syntax | Backreference | Variable |
+--------+----------------------------+----------------------+------------------+
| Perl | (?<name>...), (?'name'...) | \k<name>, \k'name' | %+{name} |
| | (?P<name>...) | \g{name}, (?&name)* | |
| | | (?P>name)* | |
+--------+----------------------------+----------------------+------------------+
| Python | (?P<name>...) | (?P=name), \g<name> | m.group('name') |
+--------+----------------------------+----------------------+------------------+
| .NET | (?<name>...), (?'name'...) | \k<name>, \k'name' | m.Groups['name'] |
+--------+----------------------------+----------------------+------------------+
| PCRE | (?<name>...), (?'name'...) | \k<name>, \k'name' | Depends on host |
| | (?P<name>...) | \g{name}, \g<name>* | language. |
| | | \g'name'*, (?&name)* | |
| | | (?P>name)* | |
+--------+----------------------------+----------------------+------------------+
这是不完整列表,但这是我能找到的。如果您了解更多口味,请添加它们!使用*
的反向引用形式是“递归”而不仅仅是反向引用;我相信这意味着它们再次与模式匹配,而不是模式与匹配的匹配。此外,我通过阅读文档来达到这个目的,但很可能会出现错误 - 这包括一些我从未使用过的语言和一些我从未使用过的功能。如果出现问题,请告诉我。
答案 2 :(得分:0)
您可以先以动态方式构建字符串,然后将其传递给Regex引擎。