2013-04-17 3 views
0

Я пытаюсь сканировать следующую строку со следующим регулярным выражением:сканирования Строки с рубиновым Regular Expression

text = %q{akdce ALASKA DISTRICT COURT CM/ECFalmdce 
      ALABAMA MIDDLE DISTRICT COURTalndce 
      } 

p courts = text.scan(/(ECF\w+)|(COURT\w+)/) 

В идеале, что я хочу сделать, это отсканировать текст и вытащить текст «ECFalmdce» и ' COURTalndce ' С помощью регулярного выражения, которое я использую, я пытаюсь сказать, что мне нужна строка, начинающаяся с COURT или ECF, за которой следует случайная строка символов.

Массив возвращается в:

[["ECFalmdce", nil], [nil, "COURTalndce"]] 

Что такая сделка с нулевыми х, кто-нибудь есть более эффективный способ написания регулярных выражений, а кто-нибудь есть ссылки на дополнительную документацию по спичечным группам?

ответ

1

Ваше регулярное выражение захватывает по-разному для ECF и COURT. Вы можете создавать группы, не захват с ?:

text.scan(/(?:ECF|COURT)\w+/) 
# => ["ECFalmdce", "COURTalndce"] 

Edit

О группах без захвата: Вы можете использовать их для создания моделей с помощью скобки без захвата рисунка.

Они узоры, такие как (?:pattern)

Вы можете найти более подробную информацию о регулярных выражениях в http://www.regular-expressions.info/refadv.html

+0

, что не являются захват групп? – Utopia025

+0

Не захватывайте весь узор. Использование '/ (?: ECF | COURT) \ w + /' вместо этого позволит избежать создания подмассивов. –