我想要一个正则表达式,它将返回零个或多个不同模式的匹配子字符串。
要匹配的不同模式
<sym>Any value</sym>
<sps>Any value</sps>
<sbs>Any value</sbs>
1.任何包含空格和特殊字符的字符串,这些字符在上述3个标记之外
其中“任何值”是包括空格和特殊字符的任何字符串。
测试用例
abcd<sps>2</sps><sbs>yy</sbs>efgh<sym>b</sym>
<sym>nu</sym>Hello World<sps>6&</sps><sbs>10</sbs>With Special Characters$#<sym>b</sym>
<sps>2</sps>Test<sbs>yy</sbs><sym>b</sym>End String
结果
abcd
<sps>2</sps>
<sbs>yy</sbs>
efgh
<sym>b</sym>
<sym>nu</sym>
Hello World
<sps>6&</sps>
<sbs>10</sbs>
With Special Characters$#
<sym>b</sym>
<sps>2</sps>
Test
<sbs>yy</sbs>
<sym>b</sym>
End String
我尝试了以下正则表达式:(?([a-zA-Z0-9]+))<sym>[^.]*</sym>|<sps>[^.]*</sps>|<sbs>[^.]*</sbs>(?([a-zA-Z0-9]+))
**“测试用例1”的结果:**获得以下字符串,而我没有获得标签外的字符串。
<sps>2</sps> <sbs>yy</sbs> <sym>b</sym>
**测试用例2的结果:**获取完整的输入文本。
<sym>nu</sym>Hello World<sps>6&</sps><sbs>10</sbs>With Special Characters$#<sym>b</sym>
你能在这方面帮助我吗?先谢谢你!
2条答案
按热度按时间5jvtdoz21#
你应该使用一个合适的XML解析器。在C#中你可以使用XElement。这允许你使用Linq-to-XML来查询它。
由于您的XML没有根,因此我们需要添加一个根。
dotnetfiddle
k97glaaz2#
交替似乎可以做你想做的事情。你需要一个最后的前瞻来阻止零出现的情况过度消耗。
你也可以使用backreference来缩短它:
在这种情况下,交替被缩短为标签值,并且结束标签可以将其与反向引用
\1
一起重用。