Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 字符串的正则表达式匹配_Regex - Fatal编程技术网

Regex 字符串的正则表达式匹配

Regex 字符串的正则表达式匹配,regex,Regex,我有以下字符串: @名称{name:name}@ 我正在寻找一个与该字符串匹配的正则表达式模式(当然名称可以是任何东西) 正则表达式还应该匹配name:name可以多次为name:name、name:name的情况 提前感谢。考虑到名称将保持不变: @([^\{]+)\{(\1:\1)(,\2)*\}@ 检查: 这个正则表达式的含义很简单:总是避免匹配即将出现的分隔符 让我们假设,在开始时,[^{]+将匹配所有内容,直到第一个{,以便抓取中间的所有字符 [^:::+:[^},]+匹配{}中的第

我有以下字符串: @名称{name:name}@

我正在寻找一个与该字符串匹配的正则表达式模式(当然名称可以是任何东西) 正则表达式还应该匹配name:name可以多次为name:name、name:name的情况


提前感谢。

考虑到
名称
将保持不变:

@([^\{]+)\{(\1:\1)(,\2)*\}@
检查:

这个正则表达式的含义很简单:总是避免匹配即将出现的分隔符

让我们假设,在开始时,
[^{]+
将匹配所有内容,直到第一个
{
,以便抓取中间的所有字符

[^:::+:[^},]+
匹配
{}
中的第一个匹配项

(,[^:::+:[^},]+)*
是尝试匹配可选逗号分隔部分的部分

以下是python中的测试用例:

>>> re.match(r'@[^{]+\{[^:]+:[^},]+(,[^:]+:[^},]+)*\}@', r'@table{name:tablea,partiton:id}@') is not None
True

name
s应该是相同的吗?名称可以是任何单词,而且它们不会相同。虽然这个代码片段可以解决这个问题,但确实有助于提高您的文章质量。请记住,您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。您能否详细说明@[^{]+\{[^::+:[^},]+(,[^:::+:[^},]+*\}是否指“名称”不相同的情况我似乎无法将我的字符串与之匹配-我的字符串是@table{name:tablea,partiton:id}@
>>> re.match(r'@[^{]+\{[^:]+:[^},]+(,[^:]+:[^},]+)*\}@', r'@table{name:tablea,partiton:id}@') is not None
True