我想使用RegEx抓住两个单词的前4个字符。我有一些RegEx经验但是搜索没有任何结果。
所以,如果我有Awesome Sauce
,我希望最终结果为AwesSauc
答案 0 :(得分:2)
使用以下参数替换文字操作:
模式:\W*\b(\p{L}{1,4})\w*\W*
替换文字:$1
请参阅regex demo。
模式细节:
\W*
- 0 +非单词字符(从左边开始修剪)\b
- 领先的单词边界(\p{L}{1,4})
- 第1组(后来通过$1
反向引用)匹配任意1到4个字母(包括Unicode字母)\w*
- 任何0+单词字符(以匹配单词的其余部分)\W*
- 0+非单词字符(右边的修剪)答案 1 :(得分:1)
我认为这个RegEx应该完成这项工作
string pattern = @"\b\w{4}";
var text = "The quick brown fox jumps over the lazy dog";
Regex regex = new Regex(pattern);
var match = regex.Match(text);
while (match.Captures.Count != 0)
{
foreach (var capture in match.Captures)
{
Console.WriteLine(capture);
}
match = match.NextMatch();
}
// outputs:
// quic
// brow
// jump
// over
// lazy
或者您可以使用以下模式:
\b\w{1,4} => The, quic, brow, fox, jump, over, the, lazy, dog
\b[\w|\d]{1,4} => would also match digits
<强>更新强> 为C#添加了一个完整的示例并略微修改了模式。还添加了一些替代模式。
答案 2 :(得分:0)
使用Linq
var res = new string(input.Split().SelectMany((x => x.Where((y, i) => i < 4))).ToArray());
答案 3 :(得分:0)
对于这种情况,使用正则表达式实际上会更复杂,完全没必要。只需按以下方式执行。
var sentence = "Awesome Sau";
// With LINQ
var linqWay = string.Join("", sentence.Split(" ".ToCharArray(), options:StringSplitOptions.RemoveEmptyEntries).Select(x => x.Substring(0, Math.Min(4,x.Length))).ToArray());
// Without LINQ
var oldWay = new StringBuilder();
string[] words = sentence.Split(" ".ToCharArray(), options:StringSplitOptions.RemoveEmptyEntries);
foreach(var word in words) {
oldWay.Append(word.Substring(0, Math.Min(4, word.Length)));
}
修改:
根据@Dai的评论更新了代码。 Math.Min
根据他的建议借用了支票。
答案 4 :(得分:0)
试试这个表达
\b[a-zA-Z0-9]{1,4}