Regex 什么';s是“的正则表达式”;最多三个单词,但不超过20个字符;?
我可以用Regex 什么';s是“的正则表达式”;最多三个单词,但不超过20个字符;?,regex,Regex,我可以用\s?(\w+\s{0,2}\w*)表示“最多三个单词”,用\w{0,20}表示“不超过二十个字符”,但如何组合这些字符?如前所述,尝试通过前瞻性将两者合并 澄清的一些例子: 早起的鸟儿有虫吃 应按顺序匹配任意三个单词(包括worm*) 这里我们有一个超级资格解释句 “超级资格解释句”的顺序太长,因此不应匹配 *在我的实际用例中,我将使用段落的最后三个单词,即(?:\r)将位于正则表达式的末尾,并且匹配“catch the worm.”)然后在Adobe InDesign中使用“no
\s?(\w+\s{0,2}\w*)
表示“最多三个单词”,用\w{0,20}
表示“不超过二十个字符”,但如何组合这些字符?如前所述,尝试通过前瞻性将两者合并
澄清的一些例子:
早起的鸟儿有虫吃
应按顺序匹配任意三个单词(包括worm*)
这里我们有一个超级资格解释句
“超级资格解释句”的顺序太长,因此不应匹配
*在我的实际用例中,我将使用段落的最后三个单词,即
(?:\r)
将位于正则表达式的末尾,并且匹配“catch the worm.”)然后在Adobe InDesign中使用“no linebreaks”字符样式应用匹配,以避免出现以下情况。匹配以空格分隔的三个单词在行或字符串的末尾,可以使用
\b(?!(?:\s*\w){21})\w+(?:\s+\w+){0,2}(?=$|[\r\n])
看。请注意,在演示中,我使用了[^\S\r\n]
而不是前瞻中的\S
,因为文本包含换行符,如果需要,请使用相同的技巧
正则表达式解释
-单词边界\b
-如果在初始单词边界之后有21个单词字符可选地前面有任意数量的空白符号,则前瞻检查将失败匹配(?!(?:\s*\w){21})
-1个单词(由1个或多个单词字符组成)\w+
-零,一个或两个1+空格序列,后跟1+字字符(?:\s+\w+{0,2}
-一种正向前瞻,只有在字符串结束((?=$|[\r\n])
)或行结束($
)时才允许返回匹配项[\r\n]
现在,如果您的单词应该只包含字母,请在您的语言中使用
[a-zA-Z]
或同等语言。如果regex风格允许,请使用\p{L}
Unicode类别/属性类。您在这里使用的是语言吗?如果您使用类似Java的东西,这个问题在IMO中会更容易处理。正则表达式并不是万能的。好吧,试试看,它至少需要1个匹配项word@WiktorStribiżew 6695步骤,情况并非如此performatic@fdfey:好的,在\b
之后移动前视:。想法基本相同。我可以从你的问题中引出一个PPCG挑战吗?如果运气好的话,会弹出一个同样适用于你问题的答案。不过我花了更长的时间。请看一下,如果可以的话请告诉我。谢谢,看起来不错。我在开始了一个稍微严格的挑战,请随意加入:):)哦:)与整个模式版本的捕获组(以及所有格量词):。是的,因为您正在检查初始单词边界后的整个子字符串是否不超过20个符号(带有(?!.{21})
),不仅仅是单词字符的数量。这是独立字符串的简化版本。