我想创建一个正则表达式来根据某些条件查找和替换大写字符。
在字符串中查找一组大写字符的起始大写,并在起始大写之前将其替换为小写和*
。
如果大写字母后面有任何小写,请在开始大写之前用小写和*
替换大写。
输入字符串:stackOVERFlow
预期输出:stack*over*flow
我试过但是无法让它完美运作。
关于如何创建正则表达式的任何想法? 感谢
答案 0 :(得分:4)
预期的输入和输出有点不合逻辑:你在“流量”中低于“f”但不包括在星号中。
无论如何,你想要的正则表达式非常简单:@"[A-Z]+?"
。这不匹配地匹配一个或多个大写字母字符的字符串(不要认为它会产生任何影响,因为匹配的字符类相对较窄)。
现在,要进行查找/替换,您可以执行以下操作:
Regex.Replace(inputString, @"([A-Z]+?)", "*$1*").ToLower();
这只是查找所有出现的一个或多个大写字母字符,并且无论在何处找到匹配项,它都会将其替换为由星号包围的自身。这是周围但不是小套; .NET Regex不提供这种字符串修改。但是,由于操作的最终结果应该是一个包含所有小写字符的字符串,只需使用ToLower()就可以得到预期的结果。
答案 1 :(得分:0)
KeithS的解决方案可以简化一点
Regex.Replace("stackOVERFlow","[A-Z]+","*$0*").ToLower()
然而,这将产生stack*overf*low
,包括恒星之间的f
。如果要排除最后一个大写字母,请使用以下表达式
Regex.Replace("stackOVERFlow","[A-Z]+(?=[A-Z])","*$0*").ToLower()
它将产生stack*over*flow
这使用模式find(?=suffix)
,它在后缀之前找到一个位置。