【问题标题】:How would I write a regular expression which matches我将如何编写一个匹配的正则表达式
【发布时间】:2015-10-08 02:31:10
【问题描述】:

给定以下数据

  1. "apple orange plum"
  2. "apple grape plum"

我将有一个给定的术语来确定某事是否匹配。

例如“苹果橙李子梨樱桃”

我需要编写一个正则表达式,它将匹配 [1.] 但不匹配 [2.],因为我的术语不包含“葡萄”

不知道用正则表达式是否可行?

【问题讨论】:

  • 有可能。你用的是什么口味的正则表达式?你试过什么?
  • 我在regexr.com 上玩了很多变体,我花了几个小时在谷歌上搜索,但我无法将它们编辑成匹配的东西。
  • 简短回答:是的,可以使用正则表达式
  • 预期答案:demo regex
  • 嗨,何塞,这可能只是为了说明,希望添加 [1.]、[2.] 只是为了澄清,它不是数据的一部分

标签: regex


【解决方案1】:

你可以使用

^(((apple|orange|plum|pear|chery)(?: |$))+)$

DEMO regex101

说明

(apple|orange|plum|pear|chery) 这些词中的任何一个

(?: |$)non capturing group

【讨论】:

    【解决方案2】:

    支持前瞻的语言(Javascript、PCRE、Ruby、Java、Python)可以使用它们来测试行/字符串是否包含这些值,顺序不限:

    ^(?=.*\b(item1)\b)(?=.*\b(item2)\b)(?=.*\b(item3)\b)
    

    对于您的 [1.] 数据,这变为:

    ^(?=.*\b(apple)\b)(?=.*\b(orange)\b)(?=.*\b(plum)\b)
    

    你可以在regex101 here看到这个。

    对于您的 [2.] 数据,这变为:

    ^(?=.*\b(apple)\b)(?=.*\b(grape)\b)(?=.*\b(plum)\b)
    

    你可以在regex101 here看到这个。

    当然,您不需要在前瞻中设置捕获组。您可以简单地匹配这些项目(没有捕获组),然后在模式的末尾使用 .* 从行的开头到结尾进行匹配:

    ^(?=.*\bapple\b)(?=.*\borange\b)(?=.*\bplum\b).*
    

    regex101 上的通知,但是您在 MATCH INFORMATION 下不再看到结果(未捕获任何内容),但选择了整行,因为匹配有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多