【发布时间】:2017-05-10 14:22:08
【问题描述】:
我有一个正则表达式模式 ^\W*(\w+(\W+|$)){1,20}$ 用于将字符串限制为 20 个单词。但问题是,这仅适用于英文,当有非英文文本时,这会立即抛出错误。
我需要编写一个正则表达式来限制一个字符串为 20 个单词,字符串可以是任何语言。
任何帮助将不胜感激。
注意:我在 Google 表单中使用此正则表达式。
【问题讨论】:
-
首先,您必须定义每种语言中的“单词”是什么。这不是一件容易的事(提示:字符之间的空格不是你这样做的方式)。作为替代方案,也许您应该重新考虑您的约束。
-
Google 表单使用不支持环视的 RE2 库。试试
^\P{L}*\p{L}+(?:\P{L}+\p{L}+){0,19}$。虽然据说有这些,但我不确定是否支持 Unicode 属性。 -
感谢大家的快速回复!我尝试使用 ^\P{L}*\p{L}+(?:\P{L}+\p{L}+){0,19}$ 但这不起作用。我想我需要考虑一些其他替代解决方案。
-
这意味着你应该缩小你的要求。比如说,你可以使用
^\W*?\S+(?:\W+?\S+){0,19}\W*$。然而,它的效率非常低,但也许 RE2 比常规 NFA 更好地处理这种模式。
标签: regex pattern-matching google-forms regex-lookarounds