Ответ 1
Да, регулярное выражение может сделать это для вас
вы могли бы сделать ([0-9]+)X([0-9]+)
Если вы знаете, что цифры - только одна цифра, вы можете взять [0-9]X[0-9]
У меня есть большая строка и вы хотите найти первое вхождение X, X - "numberXnumber"... 3X3 или 4X9...
Как я могу сделать это на С#?
Да, регулярное выражение может сделать это для вас
вы могли бы сделать ([0-9]+)X([0-9]+)
Если вы знаете, что цифры - только одна цифра, вы можете взять [0-9]X[0-9]
var s = "long string.....24X10 .....1X3";
var match = Regex.Match(s, @"\d+X\d+");
if (match.Success) {
Console.WriteLine(match.Index); // 16
Console.WriteLine(match.Value); // 24X10;
}
Также обратите внимание на NextMatch
, которая является удобной функцией
match = match.NextMatch();
match.Value; // 1X3;
это может помочь вам
string myText = "33x99 lorem ipsum 004x44";
//the first matched group index
int firstIndex = Regex.Match(myText,"([0-9]+)(x)([0-9]+)").Index;
//first matched "x" (group = 2) index
int firstXIndex = Regex.Match(myText,"([0-9]+)(x)([0-9]+)").Groups[2].Index;
var index = new Regex("yourPattern").Match("X").Index;
Для тех, кто любит методы расширения:
public static int RegexIndexOf(this string str, string pattern)
{
var m = Regex.Match(str, pattern);
return m.Success ? m.Index : -1;
}
Вы хотите номер или индекс номера? Вы можете получить оба из них, но вы, вероятно, захотите взглянуть на System.Text.RegularExpressions.Regex
Фактический шаблон будет [0-9]x[0-9]
, если вы хотите, чтобы только одиночные числа (89x72 соответствовали только 9x7) или [0-9]+x[0-9]+
, чтобы соответствовать самой длинной последовательной строке чисел в обоих направлениях.
http://www.regular-expressions.info/download/csharpregexdemo.zip
Вы можете использовать этот шаблон:
\ д ([XX])\д
Если я тестирую
blaat3X3test
Я получаю:
Смещение матча: 5 Длина матча: 3 Согласованный текст: 3X3 Смещение группы 1: 6 Длина группы 1:1 Текст группы 1: X