正则表达式用引号和冒号分割
Posted
技术标签:
【中文标题】正则表达式用引号和冒号分割【英文标题】:Regex split with quotes and colon 【发布时间】:2021-03-12 23:04:23 【问题描述】:我已经看过一千篇关于正则表达式和匹配引用的术语等的帖子,但似乎没有一个能满足我的需求,尽管我尽了最大的努力,但老实说,我对正则表达式非常糟糕,尤其是当你开始寻找前进/后退等,这是我认为我需要的。
我有一个文本框供用户输入搜索。它可能是一个单词,或者它可能有一些关于要搜索哪个字段的提示(冒号表示文本字段,或 > 或
blue "dark blue" author:"john smith" title:foo published>20200101
有几个因素需要考虑。首先,我必须将dark
和blue
放在一起,将john
和smith
放在一起作为一个搜索词。然后我必须将内容分开(:)并决定要搜索的字段。
作为第一步,我想得到一个如下所示的数组:
blue
"dark blue"
author:"john smith"
title:foo
published>20200101
然后第二步是确定每个术语是否有作者、标题等运算符。
如果这能变成一种表达方式那就太好了,但我当然不会指望它。
谁能帮我解决这个正则表达式模式?非常感谢!不管它值得我使用 C#/.NET 来处理任何细微差别。
【问题讨论】:
【参考方案1】:您可以尝试按照以下模式进行正则表达式拆分:
[ ](?="|\w+:|\w+>)
Demo
这里使用的正则表达式表示在空格[ ]
上进行拆分,根据这个逻辑:
[ ] split on space, which is followed by
(?=
" a double quote
| OR
\w+: a word term followed by colon :
| OR
\w+> a word term followed by >
)
请注意,(?=...)
术语是一个环视和断言,但 不 实际上使用任何文本。拆分期间唯一消耗的是单个空间。
【讨论】:
这真的很棒,谢谢@Tim!你能用英语解释一下它是如何工作的,这样我就可以感受到受过教育而不是用勺子喂答案吗?另外,如何处理这种“通用”术语蓝色位于中间某处的情况呢?"dark blue" author:"john smith" blue title:foo published>20200101
@mateoc15 我已经添加了对正则表达式的解释。我尝试编写 C# 代码,但我不是 C# 人,所以遇到了一些困难。
说得很有道理,感谢您的解释!我的评论中的第二种情况如何,在这些术语的中间而不是开头的某个地方插入“蓝色”? "dark blue" author:"john smith" BLUE title:foo published>20200101
它很快就会长毛。还有另一个更糟糕的边缘情况"john michael smith"
。确实,在一般情况下,您需要一个解析器。
只要“john michael smith”全部用引号括起来,它似乎对我来说效果很好。我意识到它会长毛。即使我没有得到一个正则表达式,我仍然不太确定如何识别字符串中间的 BLUE。这比我到目前为止所获得的要远得多,非常感谢。以上是关于正则表达式用引号和冒号分割的主要内容,如果未能解决你的问题,请参考以下文章