从给定的搜索输入中获取所有搜索文本

时间:2015-08-25 14:14:40

标签: regex vb.net

我在搜索文本下方输入ABC XYZ "ABC1 XYZ1" 123 456 这里的空格是分隔符,但如果搜索文本是双引号,其中包含空格,则双引号中的整个单词将被视为整个搜索文本。所以在这里我需要搜索下面的项目

1. ABC
2. XYZ
3. ABC1 XYZ1
4. 123
5. 456

任何人都可以建议任何正则表达式逻辑或拆分逻辑来获得搜索选项的上述结果。

提前致谢....

1 个答案:

答案 0 :(得分:1)

您可以使用命名捕获组和两个替代正则表达式来获取值,这两个正则表达式匹配双引号内的子字符串或非分隔的单词:

Dim input As String = "ABC XYZ ""ABC1 XYZ1"" 123 456"
Dim vals As List(Of String) = System.Text.RegularExpressions.Regex.Matches(input, """(?<val>[^""]*)""|(?<val>\w+)").Cast(Of Match)().Select(Function(m) m.Groups("val").Value).ToList()

输出:

enter image description here

请参阅regex demo

(?<val>[^""]*)""部分与"something here"匹配 - 类似于子字符串,(?<val>\w+)匹配word_134 - 类似于子字符串。所有都被捕获到命名组“val”(.NET正则表达式支持多重组名称声明,最后捕获的值保留在其中)。

<强>更新

您可以使用\S简写类来匹配任何非空白符号:

"(?<val>[^"]*)"|(?<val>\S+)

请参阅demo