Помогите сделать хорошее регулярное выражение? - PullRequest
1 голос
/ 30 января 2010

Может кто-нибудь помочь мне сделать регулярное выражение или дать мне хорошее решение, которое может разбить / проверить следующую строку:

"<2342Flsdn3Z> <9124Fsflj20>"

Все начинается с «<», 6-значный символ - «F», а строка заканчивается «>» Можно ли создать регулярное выражение, которое может найти "строки", как это?

Ответы [ 4 ]

5 голосов
/ 30 января 2010

Как насчет этого: <.{4}F[^>]+>

Это соответствует открытию <, за которым следуют любые 4 символа, F, затем все до закрытия > (путем сопоставления с любым, что не является >).

string input = "<2342Flsdn3Z><9124Fsflj20>";
string pattern = "<.{4}F[^>]+>";
foreach (Match m in Regex.Matches(input, pattern))
{
    Console.WriteLine(m.Value);
}

РЕДАКТИРОВАТЬ: часть создания хорошего регулярного выражения четко указывает шаблон, который вы хотите соответствовать. Например, то, как вы сформулировали вопрос, оставляет некоторые детали. Я ответил с моим шаблоном, чтобы соответствовать любому символу, пока F был там, где вы указали.

Для лучшего выражения вы могли бы рассказать нам несколько вещей:

  • Символы перед F всегда будут цифрами и длиной 4: \d{4} или [0-9]{4}
  • Символы после F будут иметь длину X (6?) И могут состоять только из цифр и букв: [\dA-Z]{6}
  • Регистр нечувствителен: используйте RegexOptions.IgnoreCase (.NET) или используйте [a-zA-Z]
  • Укажите свое намерение: соответствуете ли вы? Пытаетесь извлечь внутреннюю ценность? Что вы подразумеваете под сплит? Сплит на что?
  • Укажите язык, который вы используете: C #, Python, Perl и т. Д. (Вы сделали это)
1 голос
/ 30 января 2010

Да. <[A-Za-z\d]{4}F[A-Za-z\d]{6}>

<, за которыми следуют любые 4 буквы или цифры, за которыми следует F, за которыми следуют любые 6 букв или цифр, затем>

Я сделал предположение, что всегда шесть после F. Вы можете изменить повторение в соответствии со своими потребностями.

Оригинальное предлагаемое решение для сохранения правильного комментария, чтобы другие могли учиться на моей ошибке: [\d\w]{4}F[\d\w]{6}>

0 голосов
/ 30 января 2010

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

var regex = new Regex( "<\w{4}F\w+>" );
0 голосов
/ 30 января 2010

легко:

<\d{4}F\w+>

Или, просто чтобы получить строки:

(?<=<)\d{4}F\w+(?=>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...