【问题标题】:RegEx: Split String at Capitalized Letters and Non-capitalized letters to Create Small Cap Fonts正则表达式:在大写字母和非大写字母处拆分字符串以创建小型大写字体
【发布时间】:2010-03-27 06:55:45
【问题描述】:

所以我故意远离 RegEx,因为只是看着它就让我死了......呃。但现在我需要它并且可以在 .NET(C# 或 VB.NET)中真正使用一些帮助来做到这一点。我需要根据大小写或缺少大小写来拆分字符串。例如:

我不开心Percase

  1. “我”
  2. “还没起来”
  3. “P”
  4. “ercase”

FBI 探员温特斯

  1. “FBI A”
  2. “绅士”
  3. “W”
  4. “中间人”

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

【问题讨论】:

    标签: .net regex split


    【解决方案1】:

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

    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}]+",它匹配任何语言中的一个或多个,而不是大写或标题大写字母。

    【讨论】:

    • 谢谢艾伦。我需要匹配任何一个或多个大写字母和任何或多个不是大写字母的字符。
    【解决方案2】:

    虽然 Alan 的回答可能会解决您的问题,但为了完整起见,我发布了一个正则表达式,它返回大写和小写部分作为匹配项,就像在您的示例中一样。

    ANSI:

    Regex.Matches("I'm not upPercase", @"[^a-z]+|[^A-Z]+");
    

    Unicode:

    Regex.Matches("I'm not upPercase", @"[^\p{Ll}]+|[^\p{Lu}]+");
    

    【讨论】:

      【解决方案3】:

      我认为这个正则表达式应该可以工作 /([A-Z ]*)([^A-Z]*)/

      它根据数据对这些数据进行拆分 rubular.com

      【讨论】:

      • 很棒的网站,我已经为那个网站添加了书签以供将来参考。我稍微改变了你的模式,它就像一个魅力:/([A-Z]+)([^A-Z]+)/
      • 顺便说一句,这个 RE 当然假定没有输入非拉丁脚本中的输入。它完全忽略了,例如,希腊语和韩语。
      【解决方案4】:

      我认为这也可以使用正则表达式中的断言来实现:

      <?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 中做几乎相同的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-13
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        相关资源
        最近更新 更多