我正在尝试使用Regex将文本放在我的开头/结尾字符(“<”“>”)中,同时忽略文本中的加倍结束字符(因此“<<”应包含在捕获的数据)。
我试过
<([^>]*)>
和
<(.*?)>(?!>)
但我目前未能遵循以下情况:
输入:
<test>>Value>
预期产出:
test>>Value
但是我的正则表达式只捕获部分字符串。
第一个捕获
test
和第二个
test>
可悲的是,我对如何进一步解决问题没有想法。 你们其中一个正念世界的神有什么想法如何解决这个问题?
编辑:
感谢你的答案,遗憾的是他们不符合我的另一个要求(为了让问题尽可能短,我认为这并不重要......我得知教训)
输入:
<test>>Value><test>
预期产出:
test>>Value
test
答案 0 :(得分:2)
使用zero-width negative lookahead assertion匹配>
未跟随另一个>
来终止匹配似乎是最简单的方式:
<(.*)>(?!>)
在与test>>more
匹配时捕获<test>>more>
。
注意,您的第二个正则表达式(<(.*?)>(?!>)
)正在使用最小匹配修饰符,因此将停在第一个 >
,而不是另一个>
。
修改强>:
有了附加信息,<test>>more><another>
应抓取test>>more
和another
:
<([^>]*(?:>>[^>]*)*)>
使用Regex.Matches
将进行上述捕获。
扩展
< # Match <
( # Start capture
[^>]* # Match many non->
(?: # Start non-capturing group
>> # Match >>
[^>]* # Match many non->
)* # Repeat zero or more
) # End capture
> # Match >
IE中。它将尖括号的内容分解为>>
和非>
块,并匹配不确定数量的它们。它将处理<>>>
(捕获>>
)。
答案 1 :(得分:2)
我在这里:)
<((?:>>|[^>])*)>
首先匹配开头<
,然后尝试匹配>>
,如果不匹配,则>
以外的任何字符重复,直到结束>
为止发现,
它也适用于增加的要求;)
答案 2 :(得分:1)
答案 3 :(得分:-1)
(\w+)>{1,2}(\w+)
或尝试此操作,开头没有<
,最后没有>
。