RegEx:在大写字母和非大写字母处拆分字符串以创建小型字体字体

时间:2010-03-27 06:55:45

标签: .net regex split

所以我有目的地远离RegEx只是看着它杀了我......呃。但现在我需要它,并且可以在.NET(C#或VB.NET)中使用一些帮助来实现这一点。我需要根据大小写或缺少大小写分割字符串。例如:

  

我不是upPercase

     
      
  1. “I”
  2.   
  3. “'我不起来”
  4.   
  5. “P”
  6.   
  7. “ercase”
  8.   

  

FBI特工冬季

     
      
  1. “FBI A”
  2.   
  3. “gent”
  4.   
  5. “W”
  6.   
  7. “半成品”
  8.   

我这样做的原因是手动创建小型大写字母,其中非大写字符串将被发送为大写字母,其字体大小为原始字体大小的80%。感谢这里提供的任何帮助。

4 个答案:

答案 0 :(得分:2)

听起来像你只需要匹配任何不是大写字母的东西。例如:

input = Regex.Replace(input, @"[^A-Z]+", ToSmallCaps);

...其中ToSmallCapsMatchEvaluator委托,将匹配的文字转换为小型大写,但是您正在这样做。例如:

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中做同样的事情。