确定序列中下一个字符的有效选项

Determine valid options for the next character in a sequence

假设我有正则表达式

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"。

作为人类,我可以看出下一个字符需要是一个字母。 有没有一种算法可以为计算机做到这一点?

我看了Levenshtein Distance algorithms, but in order for those to provide information I need two strings, and I only have a string and a regex. Spell Checking algorithms也不太符合我的情况

我更喜欢通用解决方案,这样如果出于某种原因我需要允许123 N 4567 W Paris, Idaho,我所要做的就是修改正则表达式。

编辑

我应该说,"as a human, I can see that the regex won't allow the next character to be a number or special character, so I can exclude those options."感谢您收听!

根据 ,有可能,您只需要对所使用的正则表达式有所了解即可。例如,如果您正在解析 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);
}

此正则表达式将 return 匹配,只要您正朝着有效的 IP 前进。如果您不熟悉正则表达式的工作原理,我建议您 post 将特定的 IP 字符串转换为 regex101.com 之类的内容并稍微玩一下。