регулярное выражение c# соответствует в определенном индексе в строке?

PHP

  1. Никакие функции отладки, если Вы не управляете сервером, и даже тогда ими отчасти, не сосут
  2. , экстремальная сумма плохого кода PHP, плавающего вокруг, дает всем PHP программистам дурную славу
  3. Непоследовательная функция, называющая
  4. Неспособность иметь статическую переменную определенного типа, если я хочу один (я - большой поклонник динамического контроля типов 90% времени)
  5. , REGISTER_GLOBALS является дьяволом
6
задан Rngbus 11 August 2009 в 23:30
поделиться

4 ответа

Как насчет использования Regex.IsMatch (string, int) с использованием регулярного выражения, начинающегося с \ G (что означает «начало последнего совпадения»)?

Кажется, работает:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        string text="one two 3 4 five";
        Regex num=new Regex(@"\G[0-9]+");

        Console.WriteLine("{0} {1}",
                          num.IsMatch(text, 8), // True
                          num.IsMatch(text, 0)); // False
    }
}
12
ответ дан 8 December 2019 в 16:08
поделиться

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

^.{8}[\d]

, которая будет соответствовать, если есть 8 символы между началом строки и цифрой.

1
ответ дан 8 December 2019 в 16:08
поделиться

Если вам известна максимальная длина потенциального совпадения в строке, которую вы проверяете, ограничит сканирование строки.

Если вы проверяете только числа, это, вероятно, проще, чем если бы вы проверяли произвольные выражения. Природа Regex - сканировать до конца, чтобы найти совпадение. Если вы хотите предотвратить сканирование, вам необходимо указать длину или использовать что-то другое, кроме Regex.

string text = "one two 3 4 five";
Regex num = new Regex("[0-9]+");
int indexToCheck = 8;
int maxMatchLength = ...;
Match m = num.Match(text, indexToCheck, maxMatchLength);

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

num.Match вернет первое совпадение, если оно существует, а затем остановит сканирование. Если вам нужно больше совпадений, вы должны вызвать m.NextMatch (), чтобы продолжить сканирование совпадений.

0
ответ дан 8 December 2019 в 16:08
поделиться

Если вы хотите найти только подстроку текста, возьмите эту подстроку перед регулярным выражением.

myRegex.Match(myString.Substring(8, 10));
2
ответ дан 8 December 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: