抓住两个单词RegEx的前4个字符

时间:2017-04-11 05:49:06

标签: regex nintex-workflow

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

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

5 个答案:

答案 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}