正则表达式:匹配FIRST下划线之前的所有内容以及之间的所有内容

时间:2011-05-12 23:01:42

标签: regex

我有一个像

这样的表达式
test_abc_HelloWorld_there could be more here.
  1. 我想要一个正则表达式,它在第一个下划线之前使用第一个单词 。所以请"test"
  2. 我试过了[A-Za-z]{1,}_,但这没效果。

    1. 然后我想在第一个 2下划线之间加上“abc”或其他任何内容。
    2. 2个单独的正则表达式,未合并

      非常感谢任何帮助!

      示例:

      表示1)正则表达式匹配单词test 2)正则表达式匹配单词abc

      因此任何一种情况下的任何其他匹配都是错误的。就像在,如果我要替换我匹配的东西,那么我会得到这样的东西:

      对于案例1)匹配“test”并将“test”替换为“Goat”。

      'Goat_abc_HelloWorld_there could be more here'
      

      我不想要替换,我只想在一个单词上匹配。

2 个答案:

答案 0 :(得分:16)

在这两种情况下,您都可以使用断言。

^[^_]+(?=_)

将为您提供该行第一个下划线的所有内容,并

(?<=_)[^_]+(?=_)

将匹配两个unserscores之间的任何字符串。

答案 1 :(得分:3)

退一步考虑一下,也许你在这里过度设计解决方案。 Ruby有一个拆分方法,其他语言可能有自己的等价物

给出类似“AAPL_annual_i.xls”的内容,您可以这样做,并利用您的数据已经构建的事实

string_object = "AAPL_annual_i.xls"
ary = string_object.split("_")
#=> ["AAPL", "annual", "i.xls"]
extension = ary.split(".")[1]
#=> ["xls"]
filetype = ary[3].split(".")[0] #etc

“DOH!

但是说真的,我发现依靠分割方法不仅对我来说更容易,对于我的同事来说,阅读我的代码并理解它的作用会更容易。