所以我有目的地远离RegEx只是看着它杀了我......呃。但现在我需要它,并且可以在.NET(C#或VB.NET)中使用一些帮助来实现这一点。我需要根据大小写或缺少大小写分割字符串。例如:
我不是upPercase
- “I”
- “'我不起来”
- “P”
- “ercase”
醇>
或
FBI特工冬季
- “FBI A”
- “gent”
- “W”
- “半成品”
醇>
我这样做的原因是手动创建小型大写字母,其中非大写字符串将被发送为大写字母,其字体大小为原始字体大小的80%。感谢这里提供的任何帮助。
答案 0 :(得分:2)
听起来像你只需要匹配任何不是大写字母的东西。例如:
input = Regex.Replace(input, @"[^A-Z]+", ToSmallCaps);
...其中ToSmallCaps
是MatchEvaluator委托,将匹配的文字转换为小型大写,但是您正在这样做。例如:
static string ToSmallCaps(Match m)
{
return String.Format(@"<span style=""whatever"">{0}</span>", m.Value);
}
编辑:一个更适合Unicode的版本正则表达式@"[^\p{Lu}\p{Lt}]+"
,它与任何语言中的大写或标题字母以外的任何一个或多个匹配。
答案 1 :(得分:2)
虽然Alan的回答可能会解决你的问题,但为了完整起见,我发布了一个正则表达式,它将大写和小写部分都作为匹配返回,就像在你的例子中一样。
ANSI:
Regex.Matches("I'm not upPercase", @"[^a-z]+|[^A-Z]+");
的Unicode:
Regex.Matches("I'm not upPercase", @"[^\p{Ll}]+|[^\p{Lu}]+");
答案 2 :(得分:1)
我认为这个正则表达式应该有用
/([A-Z ]*)([^A-Z]*)/
它根据这些数据进行分割 rubular.com
答案 3 :(得分:-1)
我认为这也可以使用正则表达式中的断言来实现:
<?php
$str = 'TestMyFuncCall';
var_dump(preg_split('/(?=[A-Z])/', $str, null, PREG_SPLIT_NO_EMPTY));
输出:
array(4) {
[0]=>
string(4) "Test"
[1]=>
string(2) "My"
[2]=>
string(4) "Func"
[3]=>
string(4) "Call"
}
我很抱歉PHP,没有Visual Studio。但是你确实可以在.NET中做同样的事情。