我有一个包含一些嵌入变量的字符串,我需要提取这些变量的名称。我不熟悉正则表达式,我无法让它工作。
以下是字符串外观的示例:
Lorem ipsum dolor sit amet {%#varName1%},consectetur adipisicing #non_var elit,sed
{%#varName2 | prop1%}做eiusmod tempor incididunt ut labore et dolore magna aliqua
{%identifier#varName3 | prop2%}。 Ut enim ad minim veniam。
变量名称以#
为前缀,并放在这些分隔符{%
和%}
内。使用此表达式,我可以匹配变量名称:
(?<=#)(.*?)(?=[\s\|])
然而,这也匹配#non_var
,它不在分隔符内,也不是有效变量。
我也试过这个:
(?<={% )(#(.*?)[^\s\|])(?= %})
但这仅匹配#varName1
和#varName2|prop1
(我不需要prop1
部分)。预期结果是匹配:
varName1
,varName2
和varName3
。
任何建议都将不胜感激。
答案 0 :(得分:1)
由于您尚未提及正在使用的语言/应用程序,我将提供一般用例;我自己已经在Notepad ++中尝试过它,并取得了成功。
您可以使用正则表达式:
(\{%[^#]*#)([\w]*)(.*?%\})
此处varname
可能包含任意长度的字母,数字和下划线。如果要强制执行变量名称的第一个字符可能不是数字的条件,请使用:
(\{%[^#]*#)([a-z_][\w]*)(.*?%\})
这将识别{%
和%}
之间的所有内容。现在,您可以使用对第二个匹配的子表达式的反向引用(Notepad ++中的$2
;许多编程语言中的\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。
答案 1 :(得分:0)
试试这个 - 我认为这是对的:
(?<=\{%.*#)[\w|]+(?=.*%\})