我想要一个正则表达式,从文本的开头开始,匹配一个单词 . 如果输入的确切单词匹配,但也匹配某个最小数量的匹配字符 provided that any additional characters also match .
例如,如果我正在尝试匹配“旧金山”,但我愿意接受前五个字符足以在域中唯一地标识它:
-
匹配: San Francisco
-
匹配: San F
-
匹配: San Fra
-
匹配: San Francisco blahblah
-
失败:波士顿
-
失败:圣地亚哥
-
失败:San Fransisko
-
失败:圣弗朗索
这几乎可以工作,但错误地匹配最后两个:
^San Fr?a?n?c?i?s?c?o?
我正在使用.NET正则表达式,但任何语言的解决方案都可以 .
4 回答
您遇到的问题是分组问题 .
括号将使它成为允许'a'取决于前面的'r',依此类推 . 它仍然会在'San Frano'和'San Fransisko'上匹配,但比赛只会是'San Fran',类似于你的'San Fransiscoblahblah'案 .
它必须是正则表达式吗?使用简单的字符串比较更容易 .
如果它确实必须是正则表达式那么......
也许你在这里需要的不是一个简单的正则表达式,而是一种计算2个给定字符串的距离甚至相似度的方法?
如果是这样,请查看Levenstein算法来计算字符串之间的距离 .
这有帮助吗?
如果需要成为RegEx,那么这将有效:
哪里
这将导致匹配成为整个短语 - 如果匹配 . 对于像
San Frano
这样的事情没有部分匹配 .你可以玩above example at Regexr: