【问题标题】:how can I use unnamed Regex groups in C# inside my regex?如何在我的正则表达式中使用 C# 中的未命名正则表达式组?
【发布时间】:2018-09-09 13:34:09
【问题描述】:

嘿,所以我当前的正则表达式是 @"(into)(to)add\s[^\s]{1,}\1|\2[^\s]{1,}" 我希望输入是“将单词添加到类别中”的东西,正则表达式通常可以正常工作,但只是 \1|\2 部分,我尝试使用组和各种解决方案但我似乎无法弄清楚如何才能使输入可以是into to

谁能帮帮我? (这是在 C# 中并使用 Regex 类)

【问题讨论】:

  • 请显示输入和预期输出的示例字符串。
  • 仅供参考 {1,} 与使用 + 相同,[^\s]\S 相同
  • @PoulBak 输入可以显示在问题“将单词添加到类别”中
  • @juharr 我明白了,我忘了,谢谢

标签: c# regex regex-group


【解决方案1】:

如果我对您的理解正确,那么您不需要反向引用(未命名的)组,您可以使用简单的替换,如下所示:

@"add \w+ (into|to) \w+"

这将在搜索字符串中选择intoto

编辑

让我们更“高级”一点,使用optional 符号“?”:

@"add \w+ (in)?to \w+"

这将匹配 'in' 零次或一次,然后是 'to',因此它将匹配 into 以及 to,与原始 RegEx 完全相同。

编辑2

我有一种感觉,你想在你的 RegEx 中使用一个变量,你当然可以这样做:

string search = "into|to";
RegEx regEx = new ReqEx(@"add \w+ (" + search + ") \w+");

【讨论】:

  • 谢谢,这正是我想要的,但这给我带来了一个问题,如果我确实想使用未命名的组,我会使用 "(into)(to)add \w+ (\1|\2) \w+"?
  • 不,那仍然会在开始时匹配 'into',但这里的情况并非如此。反向引用匹配之前匹配的内容。
【解决方案2】:

从您给出的示例中,我认为您正在寻找像add\s\w+\s(into|to)\s\w+ 这样的正则表达式。您当前的正则表达式仅匹配以“intoto”开头的字符串,这可能不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2018-01-29
    • 2020-05-23
    • 2020-09-14
    相关资源
    最近更新 更多