正则表达式匹配 - 在模式内

时间:2018-03-22 16:14:26

标签: regex

我必须匹配以下模式中的所有-

"word-word":        #expected result find one -  
"word-word"         #expected result no - find because the : is missing in the end pattern  
"word-word-word":   #expected result find two -  
"word-word          #expected result no - find because the end pattern is ":  

2 个答案:

答案 0 :(得分:0)

在c#中不知道,但Javascript示例可能是可翻译的: result ='" word-word":' .replace(/ ^ [^ - ] +(( - )[^ - ] +)(( - )[^ - ] + )?:$ /,' $ 2 $ 4');

您必须检查结果是否与原始结果不同。 如果不是,没有找到任何东西,没有任何东西被替 说明: 字符串开始,然后不是" - " 其次是" - "还有更多的人物" - " 可选地后跟" - "还有更多的人物" - " 以"结尾:"

然后你想要第二个和第四个开括号的内容。

答案 1 :(得分:0)

要匹配"":之间的所有连字符,您可以使用正面和负面lookarounds尝试这样的连字符。连字符将在捕获的组1中:

(?<="(?:\w+-)*)\w+(-)(?=.*?":)

如果要替换hypen,可以捕获组1中的单词,并匹配连字符。

然后替换使用$1,然后替换:

(?<="(?:\w+-)*)(\w+)-(?=.*?":)

<强>解释

  • (?<=正面的背后隐藏着左边的东西
    • "(?:\w+-)*匹配",然后重复零次或多次一个或多个单词字符后跟连字符。
  • )关闭lookbehind
  • (\w+) - 在捕获组中匹配一个或多个单词字符,然后是短划线
    • (?=肯定右侧的正面预测
    • .*?":匹配零个或多个字符非贪婪,然后是":
  • )关闭前瞻

检查“上下文”选项卡以查看.NET Regex Tester中的替换。