regex - 正则表达式在文本中查找参数

regex - 正则表达式在文本中查找参数,第1张

毫无疑问,这是一种更好的方法,但这是我要求我这样做的方式。

我正在为我的网络应用程序创建搜索表单。我想使用基于标记的搜索。所以我使用正则表达式来使它工作。

所以我有一个搜索字符串:' c:约翰客户:15478' 正则表达式需要找到标记(c :)和参数(john),删除标记,并给我参数 - 它需要对标记的所有实例及其参数执行此操作。我的正则表达式很接近,但它没有正常工作。它不会抓取每个参数,也不会以一致的方式删除标记。所以问题是:我的正则表达式有什么问题需要修复才能获得正确的结果?

目前,它会找到第一个标记,获取其参数以及其后的所有其他内容。我需要它来找到一个参数后停止匹配。即在上面的情况下,它将匹配约翰客户:15478

也许一个更好的问题是如何使VB的正则表达式返回第一个冒号和下一个标记的开头之间的所有内容(后面跟着另一个冒号)或者在下一个结尾处停止匹配标记

正则表达式:

(?<=({0}({1})??:) ?)(\S \s*\S*)(?=\s ?\b\w :. ?)??

{0}{1}表示使用字符串的String.format调用,比如Customer(但它可以是任何东西)来定义标记。 {0}是第一个字符,{1}是其余字符。此正则表达式将匹配标记后面的任何内容,包括另一个标记及其参数(如果存在)。所以对于字符串

"c:5401 4664  c:john smith p:joam d:domain.com p:1548 c:215-548-5487 d:""192.168.0.1"""

比赛将是

'5401 4664, john smith, 215-548-5487 d:"192.168.0.1"'
'domain.com p:1548, "192.168.0.1"'
'joam d:domain.com, 1548 c:215-548-5487' 

给出我定义的标签。正则表达式无法在下一个标记的开头停止匹配。

最佳答案:

1 个答案:

答案 0 :(得分:1)

如果我不正确,你应该解决这个问题:

/\w :([^:] )(?:\s|$)/g

https://regex101.com/r/vN6fH1/1

并使用已定义的标记,它将如下所示:

/{0}({1})?:([^:] )(?:\s|$)/g

但这仍然依赖于分号而不是标记名称

(如果您没有传递字符串中的标记名称,那么它根本不会匹配)

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复