我有一些sentences
,其中包含words
和digits
。我希望从string
,1st char
和word
字母中获取包含all digit
的{{1}}。我已尝试使用all upper case
,但问题是,它不会给Regex
和all digit
字母。
我的正则表达式位于Regex101。
我的解决方案在DotNetFiddle。
CODE:
all upper case
样本输入
自由式钢
自由式合金
徒步钢英国
单速
5速
15速
带有55个过山车的3速内齿轮
MTB钢 初级MTB
样本输出
FS
FA
津市
SS
5秒
15秒
3Sigw55c
MTBS
JMTB
答案 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)
答案 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
与任何非字符匹配字符。