簡體   English   中英

除了某些模式,我如何將整個文本大寫?

[英]How do I capitalize an entire text except for certain patterns?

除以下內容外,我都有一個大寫的文本(字符串):

  1. 以:(冒號)開頭的詞
  2. 用雙引號“”引起的單詞或字符串
  3. 用單引號引起來的單詞或字符串,''

其他所有內容均應替換為大寫形式,並保留格式(空格,換行符等)。

我將如何使用Regex(C#樣式/語法)進行此操作?

我認為您正在尋找這樣的東西:

text = Regex.Replace(text, @":\w+|""[^""]*""|'[^']*'|(.)",
                     match => match.Groups[1].Success ?
                              match.Groups[1].Value.ToUpper() : match.Value);
  • :\\w+ -用冒號匹配單詞。
  • "[^"]*"|'[^']*' -匹配引用的文本。對於轉義的引號,可以使用:

     "[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*' 
  • (.) -捕獲其他任何內容(您也可以嘗試([^"':]*|.) ,它可能會更快)。

接下來,我們對Regex.Replace使用一個回調來做兩件事:

  • 確定我們是否需要保持文本原樣,或者
  • 返回文本的大寫版本。

工作示例: http : //ideone.com/ORFU8

您可以從此RegEx開始:

\b(?<![:"'])(\w+?)(?!["'])\b

但是,當然,如果還不夠的話,您必須自己進行改進。 例如,這也將找不到“ dfgdfg”(引號不等)。找到的單詞在第一個匹配項($ 1)中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM