Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中需要正则表达式帮助#_C#_Regex - Fatal编程技术网

C# c中需要正则表达式帮助#

C# c中需要正则表达式帮助#,c#,regex,C#,Regex,我对RegEx很陌生,我不知道这是怎么回事。。。。然而,我的朋友给我这个来解决我的问题,但不知怎的,它不起作用 string: department_name:womens AND item_type_keyword:base-layer-underwear reg-ex: (department_name:([\\w-]+))?(item_type_keyword:([\\w-]+))? 所需输出:数组或组 第一个要素应为:部门名称:女性 第二个应该是:女性 第三:项目类型关键字:底层内

我对RegEx很陌生,我不知道这是怎么回事。。。。然而,我的朋友给我这个来解决我的问题,但不知怎的,它不起作用

string: department_name:womens AND item_type_keyword:base-layer-underwear

reg-ex: (department_name:([\\w-]+))?(item_type_keyword:([\\w-]+))?
所需输出:数组或组

  • 第一个要素应为:部门名称:女性
  • 第二个应该是:女性
  • 第三:项目类型关键字:底层内衣
  • 第四:底层内衣

    字符串可以按任何顺序包含部门名称或项目类型关键字,但不能包含补遗

C#代码 此C#代码仅返回包含3个元素的字符串数组

1: department_name:womens
2: department_name:womens
3: womens
不知何故,它复制了第一个和第二个元素,我不知道为什么。但它不会返回我所期望的其他元素

有人能帮我吗

当我在线测试正则表达式时,它看起来很好

谢谢

尝试此操作。此操作使用前向捕获,然后回溯并再次捕获。请参阅演示


最好使用交替(或逻辑or)运算符
,因为我们不知道输入字符串的顺序

(department_name:([\w-]+))|(item_type_keyword:([\w-]+))


您可以使用类似的方法获取问题的输出:

string txt = "department_name:womens AND item_type_keyword:base-layer-underwear";
var reg = new Regex(@"(?:department_name|item_type_keyword):([\w-]+)", RegexOptions.IgnoreCase);
var ms = reg.Matches(txt);
ArrayList results = new ArrayList();
foreach (Match match in ms)
{
    results.Add(match.Groups[0].Value);
    results.Add(match.Groups[1].Value);
}

// results is your final array containing all results
foreach (string elem in results)
{
    Console.WriteLine(elem);
}
印刷品:

department_name:womens
womens
item_type_keyword:base-layer-underwear
base-layer-underwear
match.Groups[0]。Value
提供与模式匹配的零件,而
match.Groups[1]。Value
将提供模式中捕获的零件

在第一个表达式中,有2个捕获组;因此,为什么你两次出现部门名称:女性

一旦获得不同的元素,就应该能够将它们放入数组/列表中进行进一步处理。(在编辑中添加此部分)

然后,循环允许您迭代每个匹配项,如果
if
.Match()
(这更适合于单个匹配项,而我在这里启用了多个匹配项,因此它们的匹配顺序或匹配数无关紧要)



如果您使用与和或等的任何拆分,则可以使用

(department_name:(.*?)) AND (item_type_keyword:(.*?)$)
•1:部门名称:女性 •2:女性 •3:项目类型\关键词:底层内衣 •4:底层内衣

另一个想法是使用a在一场比赛中捕获和获取所有组:

^(?!$)(?=.*(department_name:([\w-]+))|)(?=.*(item_type_keyword:([\w-]+))|)
作为.NET字符串

"^(?!$)(?=.*(department_name:([\\w-]+))|)(?=.*(item_type_keyword:([\\w-]+))|)"
(点击.NET)


(如果使用多行输入,请添加
m
多行修饰符:
“^(?m)
…)

因为您的正则表达式与`和`为什么要使用lookaheads?@Unihedron?只是为了故障安全。可能更好
[\w-]+
而不是懒点
*?
项目类型\u关键字
之后为什么失败?阅读问题,字符串不会按顺序排列。你是对的@AvinashRaj已经很好地支持了你和Jerry的解决方案:)如果部门名称或项目类型\u关键字中存在特殊字符([\w-])它和这个不匹配case@menaka是的,但除此之外,懒点可能会替代为零(我的意思是),并且OP使用了
[\w-]+
这似乎不是问题所在,imho.@patel.milanb好的,我把它们都放在了一个ArrayList中。请参见编辑。顺便说一句,我还使用了
系统.Collections
来使用ArrayList。这很全面。尽管我不明白exaclty
在做什么there@vks
|)
是唯一一种欺骗的手段e match optionalAwesum也就是说。很好地将匹配包含在一个中。学习了一个新的。谢谢
(?:
  department_name     # Match department_name
|                     # Or
  item_type_keyword   # Match item_type_keyword
)
:
([\w-]+)              # Capture \w and - characters
(department_name:(.*?)) AND (item_type_keyword:(.*?)$)
^(?!$)(?=.*(department_name:([\w-]+))|)(?=.*(item_type_keyword:([\w-]+))|)
"^(?!$)(?=.*(department_name:([\\w-]+))|)(?=.*(item_type_keyword:([\\w-]+))|)"