#ruby #regex
#ruby #регулярное выражение
Вопрос:
Допустим, у меня есть такой массив:
> names
=> ["John", "Van", "der", "and", "an", "the boys and John Smith"]
Как мне просто выбрать John
Van
и the boys and John Smith
из этого массива?
Я попробовал это регулярное выражение, но в нем отсутствует последняя строка, которая является самой сложной:
/^[A-Z]w*/
Каков более полный подход, который может выявить другие случаи, когда слово с заглавной буквы появляется в середине строки, которую я могу пропустить?
Редактировать 1
Другая строка, которую я хотел бы, чтобы она могла захватить, — это: John Van der Lyn
, где есть имя, в котором есть слово с общей буквой в имени и фамилии.
Комментарии:
1. сопоставьте все строки с заглавными словами или просто с заглавными именами?
2. @sagarpandya82 Я соглашусь на все строки с заглавными буквами, потому что я считаю, что имена с заглавной буквы невозможны. Однако, если у вас есть предложение по захвату только с заглавной буквы names….do делитесь, потому что это конечная цель.
3.
^(?=.*b[A-Z]).*
4. @revo Это выглядит законно. Продолжайте и добавьте это в качестве ответа с кратким описанием, и я приму его. Спасибо!
5. Ваше регулярное выражение сработало бы, если бы вы удалили привязку в начале строки
/[A-Z]w*/
Ответ №1:
Регулярное выражение:
^(?=.*b[A-Z]).*
Это выгодно благодаря позитивному взгляду. Он проверяет, есть ли какое-либо слово, начинающееся с заглавной буквы во входной строке, а затем сопоставляет все это.
Объяснение:
^ # Assert beginning of subject string
(?= # Construct a positive lookahead
.*b[A-Z] # Match start of a capitalized word
) # End of lookahead
.* # If lookahead was successful, match whole subject string
Ответ №2:
Вы можете использовать простой bp{Lu}
, который найдет любую заглавную букву Юникода, с которой начинается слово (как b
граница слова):
def get_names(names)
names.select{ |name| name[/bp{Lu}/] }
end
names = ["John", "Van", "der", "and", "an", "the boys and John Smith"]
puts get_names(names) # ['John', 'Van', 'the boys and John Smith']
Смотрите демонстрацию Ruby