2015-12-31 2 views
0

Ниже выборочные слова, которые я буду использовать во время импорта файларегулярное выражение, чтобы соответствовать шаблону в строке

  • East Честертон (Кембридж)
  • Нью-Йорк (США)
  • ребенка (родителя)

Так вот бизнес-правила:

  1. пихты е слово должно быть не менее 3 символов длина (ль ребенок)
  2. Разрешить пространство , но недействительно, если есть только пространство (Le East Честертон)
  3. Другая часть слова в (someword)
  4. (someword) является optional
  5. Если (someword) есть минимальная длина от 3, а также допустимые пробелы.

Я достиг этого на каком-то уровне, используя следующее выражение:

^[a-zA-Z ]{1,}\([a-zA-Z ]{1,}\)$ 
  1. Теперь я хочу, чтобы убедиться, что это правильное выражение. Есть ли способ проверить с помощью автоматизации проверку нескольких комбинаций для проверки моего выражения?

  2. Как я могу достичь дополнительной части (пункт № 4), Это мин, передаю ли я (somedata) или нет, что проверяет первую часть.

также для извлечения данных в '()'

\((.*?)\) 
+2

test it here https://regex101.com/ –

+1

'{1,}' соответствует одному вхождению или более, но вы сказали, что вам нужно минимум 3 символа, поэтому это должно быть '{3,}'. Для дополнительных частей используйте '?'. Обратите внимание, что '(...)' указывает группу. Чтобы сопоставить скобки, вам необходимо их избежать: '\ (' и '\)'. Также обратите внимание, что вместо явных диапазонов вы можете использовать классы символов, такие как '\ w' (символы слова) и' \ s' (пробельные символы). Вы также можете разрешать (необязательные) пробелы между первой и второй частью с помощью '\ s *' (0 или более символов пробела). –

+0

Хотя вы можете использовать regex101 для этой задачи, помните, что этот сайт не поддерживает синтаксис .NET regex. Используйте regexhero.net или regexstorm.net. Теперь ваши требования не так понятны: что такое мин. длина 3? Первое слово или все подчасти? Чтобы проверить регулярное выражение, вы должны думать о возможных типах входных строк самостоятельно, нет возможности автоматически создавать тестовые строки. Содержимое загружает регулярное выражение, а не наоборот. Попробуйте это регулярное выражение: ['^ (? = [Az] {3,}) [az] + (?: \ P {Zs} \ ((? = [Az] {3,}) [az] + \)) ? \ г? $ '] (http://goo.gl/bkqHDp). –

ответ

2

Я думаю, вы почти там. Я сделал попытку. Соответствует ли это всем вашим требованиям?

^[a-zA-Z\s]{3,}(\([a-zA-Z\s]{3,}\))?$ 

https://regex101.com/r/yE9lB0/2

Я сделал вторую часть по желанию, поместив его между скобкой и добавив знак вопроса в конце: (myoptionalexpression)?

0

Я принял взглянуть на ответ, публикуемый здесь.

^[a-zA-Z\s]{3,}(\([a-zA-Z\s]{3,}\))?$ 

Это столкновение с

  • Разрешить пространство, но это недействительно, если есть только пространство (l.i East Честертон)

только пустые пространства будут уже совпадают.

Кроме того, описание символов может быть немного расплывчатым. Поэтому я предположил, что символы слова \w - это то, что вы имеете в виду. (в C sharp \w должны включать символы Unicode, такие как ü. Подумайте о Münster (Germany) в качестве примера.

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

^\s*(?:\w{3,}\s*)+(?:\(\s*(?:\w{3,}\s*)+\))?\s*$ 

Примеры здесь: https://regex101.com/r/gS7kG8/3

Обратите внимание, что страница regex101 работает с PHP, Python и JS регулярное выражение, он не будет давать точные результаты в случае из C# (\w в php, по-видимому, не соответствует, например, unicode)

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