回答
使用以下參數替換文本行動:
模式:\W*\b(\p{L}{1,4})\w*\W*
替換文本:$1
模式的細節:
\W*
- 0+非字字符(從左側修整)\b
- 領先字邊界(\p{L}{1,4})
- 第1組(稍後經由$1
反向引用稱爲)匹配任何1至4個字母(包括統一的)\w*
- 任何0+字字符(到字的其餘部分相匹配)\W*
- 0+非單詞字符(從右側修剪)
一種方法與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)));
}
編輯:
更新後的代碼基礎上@戴的評論。 Math.Min
檢查借用他的建議。
如果輸入字符串中的任何單詞短於4個字符,此代碼將會崩潰。它也不處理多個連續的空白字符 - 或處理非空格空白。 – Dai
@戴 - 偉大的捕獲。非常感謝。請參閱編輯。似乎OP限於正則表達式。 – niksofteng
我建議使用'.Split(null,StringSplitOptions.RemoveEmptyEntries)'來分割所有空白字符,而不僅僅是空格。 – Dai
我覺得這個表達式應該做的工作
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#一個完整的例子,並略作修改的格局。還添加了一些替代模式。
按照預期匹配'Awes'和'Sauc'。我只是在想@戴的評論關於我的答案中的字長<4,即使在這裏也適用。 – niksofteng
如果它應該捕獲<4個字符和數字字符比@G Ravinders答案將是一個合適的解決方案。 – MiGro
'\ w'已經匹配數字,在.NET正則表達式中,'\ w' ='[\ p {L} \ p {N} _]'。 –
試試這個表達
\b[a-zA-Z0-9]{1,4}
- 1. '\ id'後抓住字符串中的第一個單詞
- 2. 抓住一個字符串
- 3. 抓住一個字符串
- 4. REGEX捕獲兩個字符串之間的所有單詞
- 5. 簡單的regex找到兩個詞
- 6. 匹配的前兩個單詞的前兩個字母
- 7. 忽略前兩個特殊字符,並抓住一切後的問題我在
- 8. 如何抓住兩個字符串之間的值
- 9. 搜索字符串中的兩個單詞以驗證一個單詞在另一個單詞之前
- 10. 如何抓住一個字符串,它是2個字符串
- 11. 如何抓住兩個相同的字符之間的字符串
- 12. 抓住一個字符串中的下一個數字
- 13. 抓取給定關鍵字前後的x個單詞數?
- 14. 如何使用Jinja2連字符之前抓住一個字符串?
- 15. 奇怪的錯誤 - std :: regex只匹配前兩個字符串
- 16. 網頁抓取:如果在文檔的前20個字符中刪除單詞?
- 17. 的Python:抓住整個字符串作爲一個元素
- 18. 使用boost :: regex來匹配兩個整個單詞
- 19. Python RegEx跳過前幾個字符?
- 20. 如何刪除其他兩個單詞/字符之間的兩個單詞/字符?
- 21. REGEX javascript - 找到兩個字符集
- 22. 將兩個單詞中的第一個字母大寫爲兩個字符串
- 23. RegEx:根據前兩個字符查找匹配
- 24. REGEX 8個字符
- 25. 我怎樣才能用RegEx抓住這個?
- 26. REGEX找到字符串中的第一個或第二個大寫單詞
- 27. REGEX替換單個字符0
- 28. 獲得的首字母從的前兩個單詞串
- 29. 在C#中搜索字符串中每個單詞的前幾個字符
- 30. 初始跳過小於4個字符的單詞
你需要使用正則表達式嗎?這可以在1行Linq中完成:String.Join(「」,input.Split(null,StringSplitOptions.RemoveEmptyEntries).Select(w => w.Substring(0,Math.Min(4,w.Length ))'。 – Dai
@戴只是因爲OP有*一些RegEx experinece * – niksofteng
我使用Nintex來完成操作,所以我受RegEx – JeremyA1