正则表达式 - 如何用一些起始字母替换某个单词

时间:2014-04-04 12:18:31

标签: c# regex

我有以下字符串 - " ct lungs,mediastinum"。现在我想做一个Regex.Replace这样的单词以字母" media"开头。在表达式中转换为"胸部"。

因此,以下字符串应转换为" ct chest no contrast" -

  1. " ct media no contrast"
  2. " ct medias no contrast"
  3. " ct mediastin no contrast" 等。
  4. 我写了

    Regex.Replace(myString,@"\bmedia.*\b"," chest ")
    

    但这是在"媒体"之后的所有事情。和"媒体"包含并将其更改为" chest"。所以,如果我在给定的例子中使用上面的话,那么单词" no contrast"迷路了。我该怎么做只能替换以" media"开头的单词。到"胸部"然后将字符串中的所有内容保留原样?

    非常感谢!

5 个答案:

答案 0 :(得分:2)

.*是贪婪的,这意味着它会尝试尽可能多地匹配匹配。您可以使用.*?代替尽可能少的匹配。

Regex.Replace(myString,@"\bmedia.*?\b"," chest ")

答案 1 :(得分:1)

string text = Regex.Replace( inputString, @"media\w*", "chest" , RegexOptions.None );

这意味着用胸部替换任何单词字符的媒体+ 0或更多匹配。

您可能想要使用:

\bmedia\w*

\ b表示单词边界,因此只有在单词以media

开头时才会这样做

答案 2 :(得分:1)

在正则表达式中,\S*表示非空白字符为零或更多次。所以试试这个:

Regex.Replace(myString,@"\bmedia\S*"," chest ")
                                 ^^

如果您只想使用字母,可以将\S*切换为[a-zA-Z]*

答案 3 :(得分:1)

使用*跟踪?量词,使其非贪婪。这意味着它将停止在它找到的第一个单词边界消费,而不是最后一个(字符串的结尾)。

答案 4 :(得分:1)

没有正则表达式,也许是这样的?

Dim tempList = myString.Split(" ").ToList()
tempList.Where(s => s == "media").ToList().ForEach(i => i = "chest")
Dim myString = String.Join(" ", tempList)