正则表达式 - 在字符串中搜索2个单词

时间:2014-10-20 12:22:08

标签: regex

我在文本文件中有以下几行(简单示例,我需要工作的实际文本文件是7,000行):

  1. 厨房送货到达
  2. 下午爸爸帮忙安装了厨房,我们一直工作到午夜。
  3. 后来爸爸吃了一个奶酪三明治
  4. 我正在尝试使用正则表达式来搜索包含单词“Dad”和“kitchen”的任何行。它们不必彼此相邻,而只是在某个地方。

    在上面的例子中,只能找到第二行。

    我试过了:

    [kitchen] dad
    

    但这与第2行和第3行匹配,大概是因为[kitchen]说找到包含任何这些字符的行,而不是整个单词,以及包含“dad”的单词。

    我也尝试过:

    [\bkitchen\b] dad
    

    但这也不起作用。

    抱歉发布这个问题,我似乎有可能被Stackoverflow阻止再问问题,因为我的问题没有得到好评,但我不知道为什么,我试着提出明确的问题......

    任何建议都非常感谢。

    由于

4 个答案:

答案 0 :(得分:1)

您可以尝试以下使用外观的正则表达式。并且不要忘记启用i修饰符来进行不区分大小写的匹配。

^(?=.*?\bkitchen\b)(?=.*?\bdad\b)(?!\bkitchen\sdad\b|\bdad\skitchen\b).*

DEMO

答案 1 :(得分:0)

以下正则表达式将按照您的要求执行,但BlackBear是正确的,大多数编程语言提供了一种更简单的方法来确定一行文本是否包含子字符串。

^.*(?:dad.*kitchen|kitchen.*dad).*$

注意:表达式将始终与整行匹配。

确保在匹配时使用i标志以确保不区分大小写的匹配 另外,您可以使用更改表达式:

^(?i).*(?:dad.*kitchen|kitchen.*dad).*$

Demo

答案 2 :(得分:0)

使用lookahead,此正则表达式应该可以正常工作。

(?:(?=\bdad\b).*(?=\bkitchen\b).*)|(?:(?=\bkitchen\b).*(?=\bdad\b).*)

DEMO

答案 3 :(得分:0)

dad 后面跟着 kitchen

dad.*kitchen

kitchen 后面是 dad

kitchen.*dad

把两者放在一起:

(dad.*kitchen|kitchen.*dad)

另外,请记住区分大小写。