我必须匹配以下模式中的所有-
"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 ":
答案 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中的替换。