regex - 确定序列中下一个字符的有效选项
问题描述
说我有正则表达式
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 距离算法,但为了让那些提供信息我需要两个字符串,我只有一个字符串和一个正则表达式。拼写检查算法也不完全符合我的情况。
我更喜欢通用解决方案,这样如果由于某种原因我需要允许123 N 4567 W Paris, Idaho
我所要做的就是修改正则表达式。
编辑
我应该说,“作为一个人,我可以看到正则表达式不允许下一个字符是数字或特殊字符,所以我可以排除这些选项。” 谢谢你抓住它!
解决方案
根据这个问题,有可能,你只需要对你使用的正则表达式很聪明。例如,如果您正在解析 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之类的内容中,然后再试一试。
推荐阅读
- oracle - 使用 postgres oracle_fdw 成功使用比较运算符
- spring - 如何将多个参数作为列表传递到 JDBC 模板中
- android - 从 Android 中的属性文件显示不同的语言内容
- spring - 如何在spring集成http入站网关中使用spring security
- javascript - 条卡元素中 CVV 编号的密码掩码
- r - 使用 TimeSeries_Generator 进行 LSTM 时间序列预测
- elasticsearch - Elasticsearch:访问由 filebeat 创建的多个索引
- javascript - 如何从 JS 函数调用 Bootstrap 弹出模型?
- django - django 3.0 异步 orm
- woocommerce - 订单状态变化时调用 api