C# 捕获开始/结束字符内的文本,但忽略双结束字符

C# 捕获开始/结束字符内的文本,但忽略双结束字符,c#,regex,C#,Regex,我试图用正则表达式获取开始/结束字符(“”)内的文本,同时忽略文本内的双结束字符(因此“使用a匹配,而不是后跟另一个终止匹配似乎是最简单的方法: <(.*)>(?!>) 使用Regex.Matches将进行上述捕获 扩大 < # Match < ( # Start capture [^>]* # Match many non-> (?: # Start non-capturing group >

我试图用正则表达式获取开始/结束字符(“”)内的文本,同时忽略文本内的双结束字符(因此“使用a匹配
,而不是后跟另一个
终止匹配似乎是最简单的方法:

<(.*)>(?!>)
使用
Regex.Matches
将进行上述捕获

扩大

 <       # Match <
 (       # Start capture
  [^>]*  #  Match many non->
  (?:    #  Start non-capturing group
   >>    #   Match >>
   [^>]* #   Match many non->
  )*     #   Repeat zero or more
 )       #  End capture
 >       # Match >
匹配<
(#开始捕获
[^>]*#匹配许多非->
(?:#启动非捕获组
>>#匹配>>
[^>]*#匹配许多非->
)*#重复0次或更多次
)#结束捕获
>#匹配>
也就是说,它将尖括号的内容分为
>
和非
块,并匹配无限数量的块。它将处理
>
(捕获
>
)。

使用一个匹配一个
,而不是后面跟着另一个
来终止匹配似乎是最简单的方法:

<(.*)>(?!>)
使用
Regex.Matches
将进行上述捕获

扩大

 <       # Match <
 (       # Start capture
  [^>]*  #  Match many non->
  (?:    #  Start non-capturing group
   >>    #   Match >>
   [^>]* #   Match many non->
  )*     #   Repeat zero or more
 )       #  End capture
 >       # Match >
匹配<
(#开始捕获
[^>]*#匹配许多非->
(?:#启动非捕获组
>>#匹配>>
[^>]*#匹配许多非->
)*#重复0次或更多次
)#结束捕获
>#匹配>
也就是说,它将尖括号的内容分为
>
和非
块,并匹配无限数量的块。它将处理
>
(捕获
>

或者试试这个,不要在开头使用


或者尝试此操作,不要在开头使用

您可以使用:并获得第一组

(?:\<)(.*)(?:\>)
(?:\)

您可以使用:并获得第一组

(?:\<)(.*)(?:\>)
(?:\)

这是我的做法:)

|[^>]*)*)>
它首先匹配开头的
,然后尝试匹配code>,如果不匹配,则重复
>
以外的任何字符,直到找到结尾的

它还适用于添加的需求;)

.

这是我的做法:)

|[^>]*)*)>
它首先匹配开头的
,然后尝试匹配code>,如果不匹配,则重复
>
以外的任何字符,直到找到结尾的

它还适用于添加的需求;)



.

您给出的第一个示例有什么问题……它似乎对我有效。@RickRunowski啊,我忘记了这个示例输出了“test”而不是“test>”。它仍然是错误的,但我会澄清问题。您给出的第一个示例有什么问题……它似乎对我有效。@RickRunowski啊,我忘记了这个示例输出了“test”而不是“test>”测试>”。这仍然是错误的,但我会澄清问题。这比我的选项要好:
]{2,}.*.[124;[^>]*)>
这与
测试>>中的
更多>>或甚至更多>/code>匹配,我猜这是错误的。请参阅。感谢您的回答和解释,我真的很想知道为什么第二个问题不起作用。您的回答与原始问题匹配,但与我出于安全考虑而遗漏的另一个要求不起作用ort,很简单的问题。谢谢你的帮助!这比我的选项要好:
]{2,}.*.[124;[^>]*)>
这与
测试>>中的
更多>>或甚至更多>/code>匹配,我猜这是错误的。请参阅。感谢您的回答和解释,我真的很想知道为什么第二个问题不起作用。您的回答与原始问题匹配,但与我出于安全考虑而遗漏的另一个要求不起作用ort,最简单的问题。谢谢你的帮助!我在猜,但我很确定它仍然应该匹配
正确的猜测分类,澄清了问题。谁能解释一下,为什么用这个表达式(?!>)“之前的quesiton mark!and>是做什么的?我在猜,但我很确定它仍然应该匹配
正确的猜测分类,”澄清了问题。有人能解释一下,为什么在这个表达式中(?!>)quesiton mark!and>是做什么的吗?这很好,我也玩过这个变体:这很好,我也玩过这个变体:
<test>>Value><test>
test>>Value
test
<(.*)>(?!>)
 <([^>]*(?:>>[^>]*)*)>
 <       # Match <
 (       # Start capture
  [^>]*  #  Match many non->
  (?:    #  Start non-capturing group
   >>    #   Match >>
   [^>]* #   Match many non->
  )*     #   Repeat zero or more
 )       #  End capture
 >       # Match >
(\w+)>{1,2}(\w+)
(?:\<)(.*)(?:\>)
<((?:>>|[^>])*)>