Регулярное выражение для извлечения строки из 2 разных символов и строк

#c# #asp.net #regex #pattern-matching

#c# #asp.net #регулярное выражение #сопоставление с образцом

Вопрос:

Короткий вопрос, но не могу заставить его работать. У меня есть строка:

 COMPANY NAME - username (Name Surname).
  

Какое регулярное выражение даст мне username (без пробелов) между - и ( в таком примере?

Это ASP.NET C #, если это имеет какое-то значение. Заранее спасибо!

Редактировать :Название компании — это строка с возможными пробелами. Имя пользователя без пробелов. Символы - и ( присутствуют только в этих 2 местах. Я думал, что это на 100% очевидно, поскольку я привел такой пример.

Комментарии:

1. Может username ли когда-либо содержать пробелы или круглые скобки?

2. Может ли название компании содержать дефисы или круглые скобки?

3. Гарантируется ли, что строка закончится полной остановкой?

4. Давай, подробнее. Поскольку вопрос написан сейчас, регулярное username выражение соответствует вашим требованиям…

5. @Tim-Pietzcker в имени пользователя нет пробелов. Очевидно, я бы упомянул об этом, если бы это было возможно.

Ответ №1:

 var match = Regex.Match(
    "COMPANY - ltd (NAME) - username (Name Surname)", 
    @"^.* - (.*?) (.*)$"
);
var username = match.Groups[1].Value;
  

Если ваша строка заканчивается на a . , то регулярное выражение @"^.* - (.*?) (.*).$"

Благодаря использованию .*? (ленивого квантификатора) это регулярное выражение довольно устойчиво к странным «вещам», подобным тому, который я использую в качестве теста.

Ссылка с тестами. Пройдите по каждой строке, чтобы увидеть группу захвата.

Ответ №2:

 string resultString = null;
try {
    resultString = Regex.Match(subjectString, @"-s (S*)s*(").Groups[1].Value;
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}
  

Вывод : username

Комментарии:

1. Вы можете удалить оба RegexOptions . И, конечно, это работает только в том случае, если username не содержит пробелов. Что является разумным предположением, следовательно, 1.

2. Опция @TimPietzcker была забыта в предыдущем регулярном выражении: S. 1 За указание на это!

3. Это очень хорошо, спасибо. Обычно имена пользователей не содержат пробелов, и я не упоминал пробелы в вопросе, поэтому предположение было хорошим 🙂

Ответ №3:

Вы можете посмотреть видео с регулярными выражениями на YouTube ниже, я уверен, что на приведенный выше вопрос вы можете ответить самостоятельно.

http://youtu.be/C2zm0roE-Uc

Ответ №4:

С помощью grep легко тестировать регулярные выражения:

 kent$  echo "COMPANY NAME - username (Name Surname)."|grep -Po '(?<=- ).*(?= ()'
username