【问题标题】:Regex pattern for Non-English string in Google FormGoogle 表单中非英语字符串的正则表达式模式
【发布时间】: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


【解决方案1】:

由于语言原因,您所要求的几乎是不可能的(好吧,并非不可能,但相当困难、昂贵,并且需要整个团队)。用日语或普通话书写的文本不需要在单词之间有任何空格。此外,\w 代码等于[a-zA-Z0-9_],而\W[^a-zA-Z0-9_],不包括例如德语变音符号、俄语字母表、其他欧洲扩展。你需要那个干什么?如果这应该是您的长度限制,我建议您只需搜索平均字长并将其乘以 20(大约为 6 * 20)

【讨论】:

  • 感谢您的详细解释。这是我的错误,我假设在每种语言中字符之间的空格表示一个单词,但正如@Flimzy 指出的那样,我不能假设。所以需要想一个替代的解决方案。
【解决方案2】:

对于单词用空格分隔的语言 - 你可以试试这个公式:

^(\S+(\s+|$)){1,34}$

this example 中的内容限制为 34 个字

【讨论】:

  • 感谢阿格纽斯!!这按预期工作,除非字符串中有换行符'\n'。
  • 你很高兴
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2010-10-10
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
相关资源
最近更新 更多