Регулярное выражение в C # для фамилии, которая включает внутреннее пространство - PullRequest
5 голосов
/ 11 марта 2009

Я бы хотел регулярное выражение для C #, которое соответствует "Джонсон", "Del Sol" или "Del La Range"; другими словами, он должен соответствовать словам с пробелами в середине, но без пробелов в начале или в конце.

Ответы [ 7 ]

5 голосов
/ 11 марта 2009
^\p{L}+(\s+\p{L}+)*$

Это регулярное выражение имеет следующие особенности:

  • Будет соответствовать фамилии, состоящей из одной буквы (например, фамилия Малкольма Х)
  • Не будет совпадать с фамилиями, содержащими цифры (как и все, с \w или [^ ] будет)
  • Соответствует буквам Unicode

А как насчет фамилий, таких как "О'Коннор" или переносимых через дефис фамилий ... хм ...

3 голосов
/ 11 марта 2009

Во имя "Ṣalāḥ ad-Dīn Yūsuf ibn Ayyūb" (см. http://en.wikipedia.org/wiki/Saladdin),, какое имя, а какое - последнее? "Чан Кайши" (см. http://en.wikipedia.org/wiki/Chang_Kai-shek)?

Пробелы в именах - это наименьшая из ваших проблем! См. Личные имена в глобальном приложении: что хранить .

3 голосов
/ 11 марта 2009

Это должно сделать работу:

^[a-zA-Z][a-zA-Z ]*[a-zA-Z]$

Редактировать: Вот небольшое улучшение, которое допускает одноименные имена и дефисы / апострофы в имени:

^[a-zA-Z'][a-zA-Z'- ]*[a-zA-Z']?$
0 голосов
/ 10 мая 2012

Вот лучше:

/^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*$/

Допускает стандартную пунктуацию и пробелы, но не может начинаться с пунктуации.

0 голосов
/ 11 марта 2009

Я думаю, это больше, чем вы искали:

^[^ ][a-zA-Z ]+[^ ]$

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

Это работает в irb, но в прошлый раз, когда я работал с C #, я использовал похожие регулярные выражения:

(ноль - это хорошо, ноль - значит не удалось)

>> "Di Giorno" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> 0
>> "DiGiorno" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> 0
>> " DiGiorno" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> nil
>> "DiGiorno " =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> nil
>> "Di Gior no" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> 0
0 голосов
/ 11 марта 2009

Попробуйте что-то вроде этого:

^[^\s][\w\s]*[^\s]$
0 голосов
/ 11 марта 2009

? квалификатор твой друг. Делает наименьшее возможное совпадение вместо жадного. Используйте его для имени, как в:

^(.+?) (.+)$

Группа 1 захватывает все до первого пробела, группа 2 получает остальное.

Конечно, что теперь делать, если имя first содержит пробелы?

...