我有一个所有大写的文本(字符串),除了以下内容:
其他所有内容都应该替换为大写字母,格式(空格,换行符等)应该保留。
我如何使用Regex(C#样式/语法)进行此操作?
答案 0 :(得分:4)
我认为你正在寻找这样的东西:
text = Regex.Replace(text, @":\w+|""[^""]*""|'[^']*'|(.)",
match => match.Groups[1].Success ?
match.Groups[1].Value.ToUpper() : match.Value);
:\w+
- 用冒号匹配单词。 "[^"]*"|'[^']*'
- 匹配引用的文字。对于转义引号,您可以使用:
"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'
(.)
- 捕获其他任何内容(您也可以尝试([^"':]*|.)
,它可能会更快)。
接下来,我们使用Regex.Replace的回调来做两件事:
答案 1 :(得分:1)
您可以从此RegEx开始:
\b(?<![:"'])(\w+?)(?!["'])\b
但当然,如果还不够,你必须自己改进它。 例如,这也找不到“dfgdfg”(不等于引号) 找到的单词是在第一场比赛($ 1)