调整此代码找到两个词后停止

Adjustment to this code to stop after finding two words

在我急于完成这项工作时,我未能询问如何在我的原文 post 中的第二个单词后停止。

如果我有 Awesome Sauce Today 我想有 AwesSauc

我的第一个 post 中的代码将捕获任何单词的前 4 个字符并将它们组合起来。所以 Awesome Sauce Today 将变为 AwesSaucToda。我希望它在第二个词后停止捕获。所以在我的例子中 Today 会被忽略,但它仍然会捕获它遇到的前两个单词的 4 个字符来创建新的 wor AwesSauc

您仍然可以使用 替换文本 操作并使用

模式(?s)^\P{L}*(\p{L}{1,4})\p{L}*\P{L}+(\p{L}{1,4}).*
替换文字</code></p> <p>参见<a href="http://regexstorm.net/tester?p=%28%3Fs%29%5E%5CP%7BL%7D*%28%5Cp%7BL%7D%7B1%2C4%7D%29%5Cp%7BL%7D*%5CP%7BL%7D%2B%28%5Cp%7BL%7D%7B1%2C4%7D%29.*&i=Awesome%20Sauce%20Today%0D%0Aand%20more%20words%20here&r=%241%242" rel="nofollow noreferrer">regex demo</a>。</p> <p>此解决方案与前一个解决方案之间的区别在于模式以 <code>^ 开头锚定,而不是我正在使用的 \W(匹配任何非单词字符)匹配任何非字母字符的 \P{L}(根据需要调整),并匹配第一个和第二个单词的开头,我现在使用 2 个捕获组((\p{L}{1,4})...(\p{L}{1,4})),因此在中有两个反向引用替换模式。 (?s) 修饰符使 . 模式匹配任何字符,包括换行符。在必要的文本被捕获到 2 个捕获组之后,末尾的 .* 是删除字符串其余部分所必需的。