Регулярные выражения получают одно слово из общей фразы - PullRequest
2 голосов
/ 16 июля 2010

у меня есть такая фраза

Компьютер, Эдди ушел на рынок.

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

Как я могу сделать это в регулярном выражении?

Edit:

Извините, я использую регулярное выражение .NET:)

Ответы [ 2 ]

6 голосов
/ 16 июля 2010

Вы можете использовать этот шаблон:

Computer, (\w+) is gone to the market\.

Использует скобки для соответствия \w+ и фиксирует его в группе 1.

Обратите внимание, что период в конце был экранирован с помощьюa \, поскольку . является метасимволом регулярных выражений.

С учетом ввода:

LOL! Computer, Eddie is gone to the market. Blah blah
blah. Computer, Alice is gone to the market... perhaps...

Computer, James Bond is gone to the market.

Тогда есть два совпадения (, как видно на rubular.com ).В первом матче группа 1 захватила Eddie.Во втором матче группа 1 захватила Alice.

Обратите внимание, что \w+ не соответствует James Bond, потому что \w+ - это последовательность "одного или более символов слова".Если вам нужно сопоставить эти типы имен, отличных от «одного слова», просто замените их на регулярное выражение для соответствия именам.

Ссылки


Общая техника

Для данной тестовой строки:

i have 35 dogs, 16 cats and 10 elephants

Тогда (\d+) (cats|dogs) дает 2 результата матча ( см. На rubular.com )

  • Результат 1: 35 dogs
    • Группа 1 захватывает 35
    • Группа 2 захватывает dogs
  • Результат 2: 16 cats
    • Группа 1 захватывает 16
    • Группа 2 захватывает cats

Смежные вопросы


C # фрагмент

Вот простой пример использования групп захвата:

var text = @"

LOL! Computer, Eddie is gone to the market. Blah blah
blah. Computer, Alice is gone to the market... perhaps...

Computer, James Bond is gone to the market.

";

Regex r = new Regex(@"Computer, (\w+) is gone to the market\.");

foreach (Match m in r.Matches(text)) {
  Console.WriteLine(m.Groups[1]);
}

Приведенные выше отпечатки ( как видно на ideone.com ):

Eddie
Alice

API ссылки


По спецификации

Как отмечалось, \w+ не соответствует "James Bond".Однако он соответствует "o_o", "giggles2000" и т. Д. (, как видно на rubular.com ).Насколько это возможно, постарайтесь сделать свои шаблоны как можно более конкретными.

Аналогично, (\d+) (cats|dogs) будет соответствовать 100 cats в $100 catsup (, как видно на rubular.com ).

Это проблемы самих шаблонов, которые напрямую не связаны с захватом групп.

2 голосов
/ 16 июля 2010
/^Computer, \b(.+)\b is gone to the market\.$/

Eddie будет в первой захваченной строке $1.Если вы укажете язык, мы расскажем, как его извлечь.

Редактировать: C #:

Match match = Regex.Match(input, @"^Computer, \b(.+)\b is gone to the market\.$");
Console.WriteLine(match.Groups[1].Value);

Избавиться от ^ и $ из регулярного выражения, если строкабудет частью другой строки - они соответствуют началу и концу строки соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...