【发布时间】:2018-06-13 15:53:23
【问题描述】:
我做了一些研究,但我找不到一个我认为很常见的问题的解决方案:
我想拆分搜索词,支持引号并以智能方式处理点和连字符。
我可以写一长串需求,但我认为下面包含所有问题方面的示例更加简单明了:
My test, one. two ASP.net 030-333-12345 end
应该拆分为:
My
test
one
two
ASP.net
030-333-12345
end
我可以用一些替代品来实现这一点,并在拆分后重新替代,但我想 regex 中的专业人士会更高效、更优雅地一步解决这个问题。
我来了,但这不处理 .并且 - 正确。
var words = Regex
.Matches(keywords, @"(?<match>\w+)|\""(?<match>[\w\s]*)""")
.Cast<Match>()
.Select(m => m.Groups["match"].Value)
.ToList();
结果是错误的,因为它给出了:
My
test
one
two
ASP
net
030
333
12345
end
我认为有问题的部分是 \w,因为它对单词的定义不符合我的要求。
【问题讨论】:
-
试试
\w+(?:\S+\w+)*。现场演示regex101.com/r/ESzu53/1 -
另一个想法:
\S+\b(取决于要求)。 -
我会更加谨慎。这个问题只提到点和连字符,因此我建议
@"(?<match>\w+(?:[-.]\w+)*)|""(?<match>\w+(?:(?:\s+|[.-])\w+)*)"""。 Tillito,它对你有用吗?