1

我有一个包含一些嵌入变量的字符串,我需要提取这些变量的名称。我不精通正则表达式,我无法让它工作。

这是字符串外观的示例:

Lorem ipsum dolor sit amet {% #varName1 %}, consectetur adipisicing #non_var elit, sed

{% #varName2|prop1 %} 做 eiusmod tempor incididunt ut labore et dolore magna aliqua

{% 标识符 #varName3|prop2 %}。Ut enim ad minim veniam。

变量名称带有前缀#并放置在这些分隔符{%%}. 使用这个表达式我可以匹配变量名:

(?<=#)(.*?)(?=[\s\|])

但是,这也匹配#non_var不在分隔符内且不是有效变量的内容。

我也试过这个:

(?<={% )(#(.*?)[^\s\|])(?= %})

但这仅匹配#varName1and #varName2|prop1(我不需要该prop1部分)。预期的结果是匹配:

varName1,varName2varName3.

任何建议将不胜感激。

4

2 回答 2

1

由于您没有提到正在使用哪种语言/应用程序,我将给出一个一般用例;我自己已经在 Notepad++ 中成功尝试过。

您可以使用正则表达式:

(\{%[^#]*#)([\w]*)(.*?%\})

这里varname可以包含任意长度的字母、数字和下划线。如果要强制执行变量名称的第一个字符可能不是数字的条件,请使用:

(\{%[^#]*#)([a-z_][\w]*)(.*?%\})

这将识别 和 之间的所有内容,包括{%%}。现在您可以使用对第二个匹配子表达式的反向引用($2在 Notepad++ 中;\2在许多编程语言中)来获取varnames.

对于您的输入文本,

Lorem ipsum dolor sit amet {% #varName1 %}, consectetur adipisicing #non_var elit, sed {% #varName2|prop1 %} do eiusmod tempor incididunt ut labore et dolore magna aliqua {% identifier #varName3|prop2 %}。Ut enim ad minim veniam。

我的搜索和替换给了我:

Lorem ipsum dolor sit amet varName1, consectetur adipisicing #non_var elit, sed varName2 do eiusmod tempor incididunt ut labore et dolore magna aliqua varName3。Ut enim ad minim veniam。

于 2013-03-25T16:25:17.267 回答
0

试试这个 - 我认为这是正确的:

(?<=\{%.*#)[\w|]+(?=.*%\})
于 2013-03-25T16:32:17.010 回答