如果我有一个像这样的字符串“Hello - World - Hello World”
我想替换PRECEDING子串的第一个实例“ - ”
的字符e.g。所以用“SUPERDOOPER”代替上面就会留下:“SUPERDOOPER - 世界 - Hello World”
到目前为止,我得到了这个:“^ [^ - ] * - ”
但这包括“ - ”这是错误的。
如何用正则表达式做到这一点?
答案 0 :(得分:3)
使用non-capturing group来查看模式以验证匹配,但不包括匹配中的这些字符。
(^[^-]*)(?: -)
编辑:再次考虑之后,这似乎有点多余。这不行吗?:
^[^-]*
获取字符串开头之间的所有非破折号字符并继续直到它碰到破折号?或者你也需要排除空间?如果是这样,请使用第一个。
答案 1 :(得分:1)
为什么你认为你需要为这样的字符串操作使用正则表达式?
这更简单,更有效:
str = "SUPERDOOPER" + str.Substring(str.IndexOf(" -"));
答案 2 :(得分:0)
难道你不能这样做吗?
Regex.Replace(“世界 - Hello World”,“^ [^ - ] * - ”,“SUPERDOOPER - ”);
答案 3 :(得分:0)
Regex.Replace(input, @"(Hello)( -.*\1)", @"SUPERDOOPER$2");
答案 4 :(得分:0)
模式: ([^ - ] +)( - 。+)
第一个表达式匹配任何一系列不包括破折号的字符。 然后有一个空间。 第二个表达式以短划线和空格开头,后跟一系列一个或多个“任意”字符。
替换:“Superdooper $ 2”
提供 Superdooper - 世界 - Hello World
答案 5 :(得分:0)
您可以尝试使用正向前瞻性的正则表达式:"^[^-]*(?= - )"
。据我所知,C#支持它。此正则表达式将完全匹配您想要的内容。您可以在着名的书籍"Mastering Regular Expressions"中找到有关前瞻,后瞻和其他高级正则表达式技术的更多信息。