如何从句子中的所有数字中获取每个单词的第一个字符?

时间:2017-04-22 19:23:44

标签: c# regex

我有一些sentences,其中包含wordsdigits。我希望从string1st charword字母中获取包含all digit的{​​{1}}。我已尝试使用all upper case,但问题是,它不会给Regexall digit字母。

我的正则表达式位于Regex101

我的解决方案在DotNetFiddle

CODE:

all upper case
  

样本输入

     

自由式钢

     

自由式合金

     

徒步钢英国

     

单速

     

5速

     

15速

     

带有55个过山车的3速内齿轮

      MTB钢

     

初级MTB

     

样本输出

     

FS

     

FA

     

津市

     

SS

     

5秒

     

15秒

     

3Sigw55c

     

MTBS

     

JMTB

3 个答案:

答案 0 :(得分:1)

您可能使用的正则表达式是

@"[0-9]+|\b(?:\p{Lu}+\b|\w)"

<强>详情:

  • [0-9]+ - 一个或多个数字
  • | - 或
  • \b - 领先的字边界
  • (?:\p{Lu}+\b|\w) - 1个大写字母后跟一个尾随字边界(\p{Lu}+\b)或任何单词char(\w)。

请参阅this solution

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        var regex = @"[0-9]+|\b(?:\p{Lu}+\b|\w)";
        var list = new List<string> {"Freestyle steel","Freestyle Alloy","Trekking steel uk","Single speed","5 speed","15 speed","3 Speed internal gear with 55 coaster","MTB steel","Junior MTB"};
        foreach(var data in list)
        {
            var matches = Regex.Matches(data, regex).Cast<Match>().Select(m => m.Value.ToUpper());
            Console.WriteLine(string.Join("", matches));
        }
    }
}

输出:

FS
FA
TSU
SS
5S
15S
3SIGW55C
MTBS
JMTB

答案 1 :(得分:1)

你可以去

\d+|\b(?:[A-Z]+|\w)

请参阅a demo on regex101.com

答案 2 :(得分:1)

你可以用替代品来做:

string input = "3 Speed internal gear with 55 coaster";
string pattern = @"\B[a-z]+|\W+";
string replacement = "";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);

\B (非单词边界)断言[a-z]匹配的字母前面有单词字符,而\W与任何非字符匹配字符。

demo