抓取两个单词正则表达式的前 4 个字符

Grab first 4 characters of two words RegEx

我想使用 RegEx 抓取两个单词的前 4 个字符。我有一些 RegEx 经验,但是搜索没有得到任何结果。

所以如果我有 Awesome Sauce 我希望最终结果是 AwesSauc

一种方法Linq

var res = new string(input.Split().SelectMany((x => x.Where((y, i) => i < 4))).ToArray());

在这种情况下,使用正则表达式实际上会更加复杂并且完全没有必要。只需按照以下任一方式进行即可。

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 按他的建议支票借用。

我认为这个 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# 的完整示例并稍微修改了模式。还添加了一些替代模式。

试试这个表达式

\b[a-zA-Z0-9]{1,4}

使用带有以下参数的 替换文本 操作:

模式: \W*\b(\p{L}{1,4})\w*\W*
替换文字</code></p> <p>参见<a href="http://regexstorm.net/tester?p=%5CW*%5Cb%28%5Cp%7BL%7D%7B1%2C4%7D%29%5Cw*%5CW*&i=Awesome%20Sauce&r=%241" rel="nofollow noreferrer">regex demo</a>。</p> <p>图案详情:</p> <ul> <li><code>\W* - 0+ 个非单词字符(从左起trim)

  • \b - 前导词边界
  • (\p{L}{1,4}) - 第 1 组(稍后通过 </code> 反向引用引用)匹配任何 1 到 4 个字母(包括 Unicode 字母)</li> <li><code>\w* - 任何 0+ 个单词字符(以匹配单词的其余部分)
  • \W* - 0+ 个非单词字符(trim 从右边)