Определите допустимые параметры для следующего символа в последовательности - PullRequest
2 голосов
/ 30 сентября 2019

Скажем, у меня есть регулярное выражение

const string regex = "[A-Za-z0-9]* [0-9]{1,3} [A-Za-z]* ?[A-Za-z]*";

const string address = "ABC 123 Sesame Street"; // this is a valid match

, и до сих пор я набрал "ABC 123 Se".

Как человек, я вижу, что следующий персонаж должен бытьписьмо. Есть ли алгоритм, который может сделать это для компьютера?

Я рассмотрел алгоритмы Расстояние Левенштейна , но для того, чтобы те могли предоставлять информацию, мне нужны две строкии у меня есть только строка и регулярное выражение. Алгоритмы проверки орфографии тоже не совсем соответствуют моей ситуации.

Я бы предпочел универсальное решение, так что если по какой-то причине мне нужно разрешить 123 N 4567 W Paris, Idaho, все, что мне нужно сделать, этоизмените регулярное выражение.

Edit

Я должен был сказать: "Как человек, я вижу, что регулярное выражение не позволит следующему символу быть числомили специальный символ, поэтому я могу исключить эти параметры. "Спасибо, что поймали это!

1 Ответ

0 голосов
/ 09 октября 2019

Согласно этому вопросу , возможно, вам просто нужно быть умным в отношении используемого вами регулярного выражения. Например, если вы анализируете IP-адреса:

List<string> validNextOptions = new List<string>();
string currentString = "255.3";
string newCharacter = "2";
string partialIP = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]){0,3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])?$";
Regex partialIpRegex = new Regex(partialIP);

if(partialIpRegex.IsMatch(currentString + newCharacter))
{
    validNextOptions.Add(newCharacter);
}

Это регулярное выражение будет возвращать совпадение, пока вы переходите к действительному IP-адресу. Если вы не знакомы с тем, как работает regex, я рекомендую вам опубликовать конкретную строку IP во что-то вроде regex101.com и поиграть с ней немного.

...