正则表达式用引号和冒号分割

Posted

技术标签:

【中文标题】正则表达式用引号和冒号分割【英文标题】:Regex split with quotes and colon 【发布时间】:2021-03-12 23:04:23 【问题描述】:

我已经看过一千篇关于正则表达式和匹配引用的术语等的帖子,但似乎没有一个能满足我的需求,尽管我尽了最大的努力,但老实说,我对正则表达式非常糟糕,尤其是当你开始寻找前进/后退等,这是我认为我需要的。

我有一个文本框供用户输入搜索。它可能是一个单词,或者它可能有一些关于要搜索哪个字段的提示(冒号表示文本字段,或 > 或

blue "dark blue" author:"john smith" title:foo published>20200101

有几个因素需要考虑。首先,我必须将darkblue 放在一起,将johnsmith 放在一起作为一个搜索词。然后我必须将内容分开(:)并决定要搜索的字段。

作为第一步,我想得到一个如下所示的数组:

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。这比我到目前为止所获得的要远得多,非常感谢。

以上是关于正则表达式用引号和冒号分割的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在每个单词周围加上引号,后跟冒号

使用正则表达式用单冒号而不是双冒号拆分

C#正则表达式用分隔符分割行,但忽略引号内的分隔符

正则表达式删去双引号vscode

正则表达式用于在不被单引号或双引号包围时使用空格分割字符串

php用正则表达式怎么取双引号里面的内容??