我不幸地陷入了需要使用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 = /^_+([^(]*)/;
一旦我深吸一口气,一切都变得更好了,想想我想说的话。
答案 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]+) /
那说: 引导下划线,空格,然后捕获单词字符或空格的任意组合,然后是另一个空格。