【问题标题】:How can i replace any word but one in a string using C# regex?如何使用 C# 正则表达式替换字符串中除一个以外的任何单词?
【发布时间】:2013-05-13 17:17:24
【问题描述】:

给定这样的字符串: Fixing this [HFW] takes alot of [HFW] time [HFW]

应该是这样的: [CW] [CW] [HFW] [CW] [CW] [CW] [HFW] [CW] [HFW]

我需要用[CW] 替换除标签[HFW] 之外的任何单词。 我一直在尝试这个,我得到的最好的是:

regex = new Regex(@"[^(\[HFW\])_]+");
cleanText = regex.Replace(cleanText, " [CW] ");

这几乎可以工作,但我忽略了第一个大写 F,它是 [HFW] 标签的一部分。我的意思是,它不会将[HFW] 作为一个组。

谢谢

【问题讨论】:

  • 为什么是正则表达式?通过标记字符串不是更容易吗?

标签: c# regex match


【解决方案1】:

我有一个有点……脾气暴躁?但它可以为您的示例字符串解决问题:

(?<!\[|F|\[F)\w+(?!W|\]|W\]\])

[^...] 的问题在于它不查看字符 \[HFW\] 的顺序。

可能还有比这更优雅的,我还在努力寻找。

另一个可能的:

\w+(?=\s)|(?<=\s)\w+

【讨论】:

  • 这不起作用,它用 [CW] 替换除 [HFW] 之外的每个字符。我需要替换每个单词。
  • @user569605 它正在替换所有单词,我已经测试过here。您当前的模式将一系列单词替换为单个 [CW]。那是你真正想要的吗?
  • 我发现了另一个表达式:\w+(?=\s)|(?&lt;=\s)\w+。也许那个更擅长你的代码?我仍然对 C# 占用每个字符感到困惑 :(
  • 这是我的错误,它占用了整个单词。非常感谢:)
  • @user569605 太棒了! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 2017-07-07
  • 1970-01-01
相关资源
最近更新 更多