正则表达式将两个单词与动态单词匹配在一个字符串中

时间:2017-01-13 17:57:21

标签: regex

我有一个输入字符串,如下所示,这个字符串可以是空格,也没有空格。

其次,666666是动态字符串,存在于80000123456和SYDNEY BAKERS之间,它也可以是任何其他字符串。它的动态。

输入字符串

library(dplyr)
df1 %>%
     group_by(wavelength) %>% 
     mutate(depth = paste(depth, lead(depth), sep="-"), 
            value = c(diff(value), NA)) %>% na.omit()
#    wavelength   depth value
#        <dbl>   <chr> <int>
#1         400    0-30     8
#2         400   30-40    -1
#3         400   40-60     5
#4         400   60-79    -3
#5         400   79-89    -3
#6         400  89-101    -7
#7         400 101-110     2
#8         500    0-30    -2
#9         500   30-40     1
#10        500   40-60     8
#11        500   60-79     3
#12        500   79-89    -4
#13        500  89-101     3
#14        500 101-110    -8

我想创建一个可以匹配我的字符串保持值80000123456和SYDNEY BAKERS的正则表达式。此信息可以位于字符串的任何位置。开始,结束或介于......之间。

我试过这个

ABCD DEF++80000123456 666666 SYDNEY BAKERS 0000000 22222 333333

但是在这个字符串80000123456和SYDNEY BAKERS之类的匹配可以独立存在于字符串的任何地方。但在我的情况下

模式可能只是这样

/^.*?\b80000123456\b.*?\bSYDNEY BAKERS\b.*?$/m

80000123456和SYDNEY BAKERS之间必须有一个字符串

希望它解释......

对此有任何建议吗?

2 个答案:

答案 0 :(得分:1)

我希望我理解正确,因为与正则表达式相比,它似乎有点微不足道,但是

/80000123456(.*)SYDNEY BAKERS/

匹配您指定的值之间的所有内容。

DEMO HERE

答案 1 :(得分:0)

这可行:

80000123456\s?(\d+?)\s?SYDNEY BAKERS

它确实假设变量字符串是数字,您可能需要考虑它。

优点:

  • 捕获的表达式是非贪婪的
  • 不会在您捕获的部分中获得“空格”

更多选项:

如果您需要的不只是数字字符,而不是\d+?

  • \w+?匹配字母数字和更多
  • .+?任何字符

Here's an example