Ruby Regex Match Между "foo" и "bar" - PullRequest
2 голосов
/ 19 января 2012

Я, к сожалению, попал в ситуацию, когда мне нужно регулярное выражение с использованием 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 ]

7 голосов
/ 19 января 2012
str = "_____ table salt (1)   [F]"
p str[ /_{3}\s(.+?)\s+\(/, 1 ]
#=> "table salt"

То есть:

  • Найдите как минимум три символа подчеркивания
  • и символ пробела (\s)
  • , а затем один или несколько (+) любого символа (.), но как можно меньше (?), до тех пор, пока вы не найдете
  • один или несколько пробельных символов,
  • и затем литерал(

Парень в середине сохраняет этот бит, и 1 вытаскивает его.

2 голосов
/ 19 января 2012

Попробуйте: ^[_]+([^(]*)\(

Он будет соответствовать строкам, начинающимся с одного или нескольких подчеркиваний, за которыми следует что-либо, не равное открывающей скобке: http://rubular.com/r/vthpGpVr4y

1 голос
/ 19 января 2012

Вы можете использовать

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

^_____ соответствует подчеркиванию от начала строки

\s* соответствует любому пробелу

( начало группировки
[^(]+ соответствует всем не ( символам хотя бы один раз
? соответствует самой короткой строке (не жадной)
) конец группировки

\s* соответствует любому пробелу

\( найти (

1 голос
/ 19 января 2012

Вот рабочее регулярное выражение:

str = "_____ table salt (1)   [F]"
match = str.match(/_([^_]+?)\(/)
p match[1].strip # => "table salt"
0 голосов
/ 19 января 2012

Мне кажется, самое простое регулярное выражение, чтобы сделать то, что вы хотите:

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

Это говорит: начальные подчеркивания, пробел, затем запишите любую комбинацию символов или пробелов в слове, затем другой пробел.

0 голосов
/ 19 января 2012
 "_____ table salt (1) [F]".gsub(/[_]\s(.+)\s\(/, ' >>>\1<<< ')
 # => "____ >>>table salt<<< 1) [F]" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...