正则表达匹配2例

时间:2012-01-17 21:20:47

标签: c# regex

我在查找所有案例的正确匹配时遇到问题。 我想要抓住一些字符串(这里是我的例子## 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#进行编码

3 个答案:

答案 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();

这给出了以下正确的输出(即第一个字符串中的两个匹配,第二个字符串中只有一个匹配):

enter image description here

答案 2 :(得分:0)

如果你试图解析xml中的属性,那么你不能只在引号之间找到## xyz ##。例如:

<a i="2"/> ##xyz## <a i="##xyz##"/>

你的正则表达式将匹配:

"/> ##xyz## <a i="

您可以尝试以下内容:

\"[^\"<>]*(##xyz##)[^\"<>]*\"

注意我使用了“你不需要的,但它有效。