抓取两个单词正则表达式的前 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 从右边)
我想使用 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 从右边)