我在查找所有案例的正确匹配时遇到问题。 我想要抓住一些字符串(这里是我的例子## xyx ##),例如在引号中, 如果我有类似
的东西案例1)
<picture href="hello" ##xyz##>##xyz##</picture>
输出应该不匹配,因为它们都没有引号。
如果我有不同的案例,如
案例2)
<picture href="##xyz##" dbhdfbhg="dbfdhfbhgbt fgkg ##xyz## hdjvffhgfhd">
我希望匹配两个包含## xyz ##的案例,因为它们都在引号中
案例3)
<picture href="##xyz##">
##xyz##
</picture>
正则表达式应该只捕获第一个而不是第二个..
我试过像(“)([^”]。)?(## xyz ##)([^“]。)?(”) 得到错误的输出。 在案例3中它捕获第二个,即使我在正则表达式中使用多行选项。有人可以帮忙吗? 我正在使用C#进行编码
答案 0 :(得分:1)
在nregex.com上,我得到以下内容来处理所有示例:
\"([^"])*(##xyz##)([^"])*\"
答案 1 :(得分:0)
您可以尝试类似以下LINQPad代码段。正则表达式使用前瞻(?=
来查找匹配的引用,然后尝试匹配该文本段中的 ## xyz ## :
var text = "<picture href=\"##xyz##\" dbhdfbhg=\"dbfdhfbhgbt fgkg ##xyz## hdjvffhgfhd\">";
var text1 = @"<picture href=""##xyz##"">
##xyz##
</picture>";
var regex = new Regex("\"(?=[^\"]+)[^#]*##xyz##[^\"]*\"");
var matches = regex.Matches(text);
var matches1 = regex.Matches(text1);
matches.Dump();
matches1.Dump();
这给出了以下正确的输出(即第一个字符串中的两个匹配,第二个字符串中只有一个匹配):
答案 2 :(得分:0)
如果你试图解析xml中的属性,那么你不能只在引号之间找到## xyz ##。例如:
<a i="2"/> ##xyz## <a i="##xyz##"/>
你的正则表达式将匹配:
"/> ##xyz## <a i="
您可以尝试以下内容:
\"[^\"<>]*(##xyz##)[^\"<>]*\"
注意我使用了“你不需要的,但它有效。