匹配a";占位符;在.NET中使用特定参数
我试图从文本(一些是原始文本,一些是xml)中提取一些有用的数据(带有特定参数的占位符) 有用的部分用以下任一项分隔:匹配a";占位符;在.NET中使用特定参数,.net,regex,.net,Regex,我试图从文本(一些是原始文本,一些是xml)中提取一些有用的数据(带有特定参数的占位符) 有用的部分用以下任一项分隔:$,%,[],{} 下面的示例以$给出,并显示了我感兴趣的不同可能的内容 $EX1$ -> EX1 $EX2(a$b$c)$ -> EX2, (, a$b$c $EX3(abc\x/)$ -> EX3, (, abc\x/ $EX4(\@\,/&
$,%,[],{}
下面的示例以$
给出,并显示了我感兴趣的不同可能的内容
$EX1$ -> EX1
$EX2(a$b$c)$ -> EX2, (, a$b$c
$EX3(abc\x/)$ -> EX3, (, abc\x/
$EX4(\@\,/&/)$ -> EX4, (, \@\,/&/
$EX5/X(Z)Y/$ -> EX5, /, X(Z)Y
$EX6/X(ABC)/1$ -> EX6, /, X(ABC), 1
$EX7/X\\Z\/Y/$ -> EX7, /, X\\Z\/Y
$EX8/(A)/(B)/$ -> EX8, /, (A), (B)
$EX9/(\\$A$)\//(\\$B$\/)/$ -> EX9, /, (\\$A$)\/, (\\$B$\/)
第一部分是占位符名称,可选地后跟一些参数,如(…)
或/…/
或/…/xx
或/…/
其中,xx
是一个数字,可以是任何东西
我已经构建了下面的regex witch,它几乎可以完成这项工作,我想知道是否有改进的方法,或者是否有其他方法可以完成这项工作(它必须与.NET regex引擎兼容)
\$
(?=[^$]{3,100}\$)
(?[A-Za-z0-9:{1,20})
(?:
(?\/)
(?(?:[^\\\/\r\n]\\\\/?)*)
\/
(?:
(?(?:[^\\\/\r\n$]\\\[\/$]?)*)
\/
|
(?\d*)
)
|
(?:
(?\()
(?(?:[^\t\r\n\f()
\)
)?
)
\$
这里是一个“改进”版本的正则表达式,它使用()和{}的平衡组。捕获组的名称为“ph”、“FirstSep”、“value1”、“value2”、“value3”(为了测试的简单性,您可以随意重命名它们):
有关将分隔字符串与内部转义分隔符进行匹配的详细信息:。看起来/
和()
也是示例中的分隔符,是这样吗?也似乎是您的代码中的多行
?regex还必须接受通过\right?@CS转义ᵠ 是,()和/是“第二级”分隔符。正则表达式必须接受通过“\”转义。什么是多行?分隔符之间的内容不能包含“\n”(如果包含,$placeholder(…)$必须忽略)字符,但文本本身可以。
\$
(?=[^$]{3,100}\$)
(?<PH>[A-Za-z0-9:_-]{1,20})
(?:
(?<C1>\/)
(?<RX>(?:[^\\\/\r\n]|\\\/?)*)
\/
(?:
(?<R>(?:[^\\\/\r\n$]|\\[\/$]?)*)
\/
|
(?<G>\d*)
)
|
(?:
(?<C2>\()
(?<F>(?:[^\t\r\n\f()]|\\[()]?)*)
\)
)?
)
\$
\$
(?=[^$]{3,100}\$)
(?<ph>[\w\:\-]+)
(?:(?<FirstSep>[\/\(\{])(?<value1>
(?>
[^{}()]+
| [\(\{] (?<number>)
| [\)\}] (?<-number>)
)*
(?(number)(?!))
)
[\)\}]
)?
(?:(?<FirstSep>/)
(?<value2>
\d+ |
[^/\r\n\\]*(?>\\.[^/\r\n\\]*)*
)?
)?
(?:/
(?<value3>[^/\r\n\\]*(?>\\.[^/\r\n\\]*)*
)?
)?
/?
\$
$EX2(a($b)$c)$ --> EX2, (, a($b)$c
$EX3{a({bc})\x/}$ --> EX3, {, a({bc})\x/