【发布时间】:2022-01-23 19:50:20
【问题描述】:
我有一个关于使用正则表达式解析多个重复组的问题。 用户可能会输入一些查询,我需要从中解析并构造正确的 sql 语句。 有人可能会进入:
Artist:Rolling Stones
Artist:"Rolling Stones"
Artist:"Rolling Stones" AND Title:Satisfaction
Artist:"Rolling Stones" AND Title:Satisfaction AND FileType:mp3
此正则表达式将解析前 2 个样本:
(([A-Za-z].+?):("?.+"?)\s(AND|and|Or|or)?)
但我可以有 1,2 或 n 个同组。有什么东西,我可以说重复多次并使用相同的模式来匹配示例 3 中的标题以及示例 4 中的标题和文件类型。
我想出了这个:
(([A-Za-z].+?):("?.+"?)\s(AND|and|Or|or)?)\s+?(([A-Za-z].+?):("?.+"?)(AND|and|Or|or)?)?
这将捕获样本 3,但在 1 和 2 上不匹配。
感谢任何帮助。谢谢
【问题讨论】:
-
工具或语言是什么?这个
Artist:Rolling Stones和Artist:"Rolling Stones"可以出现在双引号之间,也可以不出现?如果 OR 或 AND 是标题的一部分怎么办? -
在我看来,正则表达式并不是最好的工具。我建议使用antler 之类的东西来为您的查询定义语法并将它们进一步转换为 SQL
-
感谢您的所有回答。会试试看..我使用的语言是c#。最终可能会进行一些字符串操作,例如拆分、索引、子字符串,然后在这些操作上使用正则表达式以进一步解析
标签: regex