Регулярное выражение соответствия слов между пробелами - PullRequest
1 голос
/ 09 ноября 2009

Мне нужно регулярное выражение, соответствующее следующему (квадратные скобки указывают, что я хочу соответствовать этому разделу, их нет в фактической строке, которую нужно сопоставить!):

More Words:
    6818 [some words]       641 [even more words]

Я попробовал это со следующим:

(?<=[0-9]+\s)[a-z\s]+(?!\s{2,})

Чтобы сказать это в литералах; «Сопоставьте все слова, включая пробелы между ними, которые идут через один пробел после 1 или более цифр и до 2 или более пробелов», но он выделяет все пробелы, а также иногда удаляет последнюю букву слова (wtf?)

Ответы [ 3 ]

2 голосов
/ 09 ноября 2009

это работает для меня

[0-9]+\s([a-z \s]+)\s\s
2 голосов
/ 09 ноября 2009

1001 * попробовать *

(?<=[0-9]+\s)([a-z]+\s)*[a-z]+(?!\s{2,})

@ Барт: я снял скобки.

Объяснение: при этом будут выбраны все слова, за которыми следует один пробел (если они существуют) плюс последнее слово, за которым не следует пробел (что является обязательным)

0 голосов
/ 09 ноября 2009

(?<=\d\s)([a-zA-Z]+\s)*[a-zA-Z]+

Этот сделал свое дело! Не спрашивай, как я пришел к этому, просто гуляю ... Тем не менее, вы мне очень помогли:)

Для пояснения этого регулярного выражения, краткое объяснение:

1: (                open group 1
2:  ?<=\d\s         look, if a digit followed by a whitespace are before group 2
3: )                close group 1
4: (                open group 2
5:  [a-zA-Z]+\s     match any words / letters that are followed by a whitespace
6: )*               close group 2 and let it repeat or not even be there
7: [a-zA-Z]+        match any words / letters and let them repeat one or more times

Короче говоря, регулярное выражение не пытается сопоставить слова между количеством пробелов, но сопоставляет что-либо между цифрой / пробелом и словом / буквой:)

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