Regex 有没有一种方法可以;“召回”;正则表达式本身中已匹配的字符序列?
我正在搜索的正则表达式具有以下约束:Regex 有没有一种方法可以;“召回”;正则表达式本身中已匹配的字符序列?,regex,delimiter,Regex,Delimiter,我正在搜索的正则表达式具有以下约束: 它以“/”开头 然后“[”一个非数字序列(在此列表中称为分隔符)和“]” 下一行“\n” “[“0个或多个由以前找到的分隔符“]”分隔的数字。” 例如,以下文本与正则表达式匹配: //[*#*] [1*#*34*#*64] //[*#*] [1#34#64] 以下文本与正则表达式不匹配: //[*#*] [1*#*34*#*64] //[*#*] [1#34#64] 因为分隔符在第一行中不匹配 我当前创建的正则表达式是 ^//\[(\D)+\]\
- 它以“/”开头
- 然后“[”一个非数字序列(在此列表中称为分隔符)和“]”
- 下一行“\n”
- “[“0个或多个由以前找到的分隔符“]”分隔的数字。”
//[*#*]
[1*#*34*#*64]
//[*#*]
[1#34#64]
以下文本与正则表达式不匹配:
//[*#*]
[1*#*34*#*64]
//[*#*]
[1#34#64]
因为分隔符在第一行中不匹配
我当前创建的正则表达式是
^//\[(\D)+\]\n\[[(\d)+(\D)+]*(\d)+\]$|^//\[(\D)+\]\n\[\]$|^//\[(\D)+\]\n\[(\d)+\]$
但显然,这个正则表达式与前面的两个例子都匹配
有没有办法“调用”正则表达式本身中已匹配的字符序列?您需要使用反向引用,在大多数语言中,您可以使用
\n
引用匹配的组,其中n
是组号
这种模式将起作用:
//\[([^]]++)]\n\[(?>\d++\1?)+]
要分解它:
只匹配文本/
匹配方括号中的一些字符\[([^]]+])]
匹配换行符\n
匹配一个或多个数字,后跟在第一个模式部分捕获的匹配项(可选)。这是一个原子群\[(?:\d++\1?++]
\n
引用匹配的组,其中n
是组号
这种模式将起作用:
//\[([^]]++)]\n\[(?>\d++\1?)+]
要分解它:
只匹配文本/
匹配方括号中的一些字符\[([^]]+])]
匹配换行符\n
匹配一个或多个数字,后跟在第一个模式部分捕获的匹配项(可选)。这是一个原子群\[(?:\d++\1?++]
r'^/\[([^\]]+)\]\n\[\d+(\1\d+*\]'
样本运行:
>>>string=“”/[*#*]
... [1*#*34*#*64]"""
>>>打印重新搜索(r'^/\[([^\]+)\]\n\[\d+(\1\d+*\]),字符串)。组(0)
//[*#*]
[1*#*34*#*64]
将匹配Python中的字符串
您需要一个名为back reference(一个非常好的教程)的东西 在Python中使用此正则表达式:
r'^/\[([^\]]+)\]\n\[\d+(\1\d+*\]'
样本运行:
>>>string=“”/[*#*]
... [1*#*34*#*64]"""
>>>打印重新搜索(r'^/\[([^\]+)\]\n\[\d+(\1\d+*\]),字符串)。组(0)
//[*#*]
[1*#*34*#*64]
将匹配Python中的字符串
查找回溯引用。举个简单的例子,
\(.*\)\1
匹配任何形式的字符串
。也就是说,一个字符串是由一个字符串连接到它自己而成的。你使用的是什么语言?查阅引用。举个简单的例子,\(.*\)\1
匹配任何形式的字符串
。意思是,将字符串连接到自身的字符串。您使用的语言是什么?