使用Regex验证列表

时间:2017-08-25 13:50:17

标签: regex

我被要求帮助整理一个验证一些返回的MS Excel表格的系统。

已经存在一个Python程序,它接收返回的Excel表单,另一个MS Excel工作簿看起来很像表单,但字段中填充了Regexes。

Python代码然后通过测试返回的表单来验证表单,依次从Regex表单对正则表达式进行验证。

这一切都按预期工作,并且输出一个工作簿,其中列出了未发生匹配的问题。

然而,验证并不总是按预期返回结果,我被要求尝试将其整理出来。

我一直在审查针对文档的正则表达式,描述了表单中的有效响应应该是什么。我可以应付他们中的大多数,但其中一些让我思考。这些是表单中的有效条目是项目列表的那些。例如。由逗号或换行符分隔的单词列表。

每次我遇到其中一个时,我一直在使用以下方法:

^[A-Z]{0,10}((, *|\n)[A-Z]{0,10})*$

因此,这将匹配第一个大写单词最多10个字母,然后是列表的其余部分,每个条目前面都有,<CR>。它有效,但我想知道是否有更好的方法?我之所以这样认为是因为每个列表条目的匹配模式必须在正则表达式中两次。因此,如果发现问题,则必须在两个地方进行纠正。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

使用

^\b((^|, *|\n)[A-Z]{1,10})+$

通过检查单词边界,确保文本以单词字符(即a-zA-Z0-9_)开头。从而阻止文本以,或空行开头。

然后,重复至少一次,应该有一行以

开头
  • 文字开头
  • 逗号后跟任意数量的空格
  • 换行

然后,至少有一个,最多十个大写字符。

第一个开始替代显然只能用于行的开头,第二个用于中间词,最后一个用于行的最后一个词。

See it here at regex101