Ruby正则表达式匹配“foo”和“bar”

时间:2012-01-19 01:33:34

标签: ruby regex

我不幸地陷入了需要使用Ruby的正则表达式的情况。基本上我想在下划线之后和第一个括号之前匹配这个字符串。所以最终结果将是“食盐”。

_____ table salt (1)   [F]

像往常一样,我试图用自己和rubular.com来对抗这场战斗。我得到了第一部分

^_____ (Match the beginning of the string with underscores ).

然后我变得更大胆了,

^_____(.*?) ( Do the first part of the match, then give me any amount of words and letters after it )

Regex已经受够了,并且结束了那个废话并且结束了。所以我想知道stackoverflow上是否有人知道或者对于如何向Ruby Regex解析器说出我的目标有任何暗示。

编辑:谢谢大家,这是我在用rubular创建后最终使用的模式。

ingredientNameRegex = /^_+([^(]*)/;

一旦我深吸一口气,一切都变得更好了,想想我想说的话。

6 个答案:

答案 0 :(得分:7)

str = "_____ table salt (1)   [F]"
p str[ /_{3}\s(.+?)\s+\(/, 1 ]
#=> "table salt"

那说:

  • 找到至少三个下划线
  • 和空格字符(\s
  • 然后是一个或多个(+)任何字符(.),但尽可能少(?),直至找到
  • 一个或多个空白字符,
  • 然后是文字(

中间的parens保存那个位,而1将它拉出来。

答案 1 :(得分:2)

试试这个:^[_]+([^(]*)\(

它将匹配以一个或多个下划线开头的行,后跟任何不等于左括号的行:http://rubular.com/r/vthpGpVr4y

答案 2 :(得分:1)

这是正则表达式:

str = "_____ table salt (1)   [F]"
match = str.match(/_([^_]+?)\(/)
p match[1].strip # => "table salt"

答案 3 :(得分:1)

您可以使用

^_____\s*([^(]+?)\s*\(

^_____匹配字符串

开头的下划线

\s*匹配任何空格字符

(分组开始     [^(]+至少匹配所有非(字符一次     ?匹配最短的字符串(非贪婪)
)分组结束

\s*匹配任何空格字符

\(找到(

答案 4 :(得分:0)

 "_____ table salt (1) [F]".gsub(/[_]\s(.+)\s\(/, ' >>>\1<<< ')
 # => "____ >>>table salt<<< 1) [F]" 

答案 5 :(得分:0)

在我看来,做你想做的最简单的正则表达式是:

/^_____ ([\w\s]+) /

那说: 引导下划线,空格,然后捕获单词字符或空格的任意组合,然后是另一个空格。