Извлечь подстроку из строки с помощью регулярных выражений - PullRequest
2 голосов
/ 18 марта 2009

Представьте, что пользователи вставляют строки в несколько компьютеров.

На одном компьютере шаблон в конфигурации извлечет некоторые символы этой строки, скажем, с позиций 4 до 5. На другом компьютере шаблон извлечения будет возвращать другие символы, например последние 3 позиции строки.

Эти конфигурации (шаблоны Regex) различны для каждого компьютера и должны быть доступны для изменения администратором без необходимости изменения исходного кода.

Некоторые примеры:

         Original_String       Return_Value
User1 -  abcd78defg123         78
User2 -  abcd78defg123         78g1
User3 -  mm127788abcd          12
User4 -  123456pp12asd         ppsd

Можно ли это сделать с помощью Regex? Благодаря.

Ответы [ 6 ]

7 голосов
/ 18 марта 2009

Почему вы хотите использовать регулярные выражения для этого? Что не так с:

string foo = s.Substring(4,2);
string bar = s.Substring(s.Length-3,3);

(вы можете легко их обернуть, чтобы немного проверить границы длины)

Если вы действительно хотите, вы могли бы обернуть его в Func<string,string>, чтобы положить куда-нибудь - хотя я не уверен, что я потрудусь

Func<string, string> get4and5 = s => s.Substring(4, 2);
Func<string,string> getLast3 = s => s.Substring(s.Length - 3, 3);
string value = "abcd78defg123";
string foo = getLast3(value);
string bar = get4and5(value);
3 голосов
/ 18 марта 2009

Если вы действительно хотите использовать регулярное выражение:

^...(..)

И

.*(...)$
1 голос
/ 18 марта 2009

Чтобы получить значения для регулярного выражения для дальнейшего использования, вы обычно используете (), в зависимости от того, какой это может быть компилятор регулярного выражения () или для Microsoft MSVC.

Пример

User4 -  123456pp12asd         ppsd  

наиболее интересен тем, что у вас есть 2 отдельные области захвата. Есть ли какое-то правило по умолчанию о том, как их объединить, или вы захотите указать, как получить результат?

Возможно, что-то вроде

r/......(..)...(..)/\1\2/  for ppsd
r/......(..)...(..)/\2-\1/ for sd-pp

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

1 голос
/ 18 марта 2009

Группировка. Вы можете найти совпадение в /^.ndom3 угождаемом виде (так как вы можете найти группу $ 1, например.

)

Вопрос в том, почему? Обычная обработка строк, т. Е. Фактические методы подстрок будут быстрее и понятнее.

1 голос
/ 18 марта 2009

Мне кажется, что Regex здесь не является решением. Чтобы вернуть фрагмент строки, начинающейся в позиции pos (начиная с 0) и длиной length , вы просто вызываете функцию Substring следующим образом:

string section = str.Substring(pos, length)
1 голос
/ 18 марта 2009

Я не уверен, что вы надеетесь получить с помощью RegEx. RegEx используется для сопоставления с образцом. Если вы хотите извлечь на основе позиции, просто используйте подстроку.

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