繁体   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