调整此代码找到两个词后停止
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 个捕获组之后,末尾的 .*
是删除字符串其余部分所必需的。
在我急于完成这项工作时,我未能询问如何在我的原文 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 个捕获组之后,末尾的 .*
是删除字符串其余部分所必需的。