通常我会期待一种String.contains()
方法,但似乎没有一种方法.
检查这个的合理方法是什么?
考虑:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
Run Code Online (Sandbox Code Playgroud)
假设我有上面的代码,编写语句的正确方法是什么if ($a contains 'are')
?
如何检查字符串是否与此模式匹配?
大写字母,数字,大写字母,数字......
示例,这些将匹配:
A1B2
B10L1
C1N200J1
Run Code Online (Sandbox Code Playgroud)
这些不会('^'指向问题)
a1B2
^
A10B
^
AB400
^
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种字符串相似度算法,它可以在变长字符串上产生比通常建议的更好的结果(levenshtein距离,soundex等).
例如,
鉴于字符串A:"罗伯特",
然后是字符串B:"Amy Robertson"
会比一个更好的比赛
字符串C:"理查德"
此外,优选地,该算法应该是语言不可知的(也可以用于除英语之外的语言).
有没有办法在Javascript中检索正则表达式匹配()的结果字符串中的(起始)字符位置?
我想做模糊字符串比较,但与使用哪个库混淆.
选项1:
import Levenshtein
Levenshtein.ratio('hello world', 'hello')
Result: 0.625
Run Code Online (Sandbox Code Playgroud)
选项2:
import difflib
difflib.SequenceMatcher(None, 'hello world', 'hello').ratio()
Result: 0.625
Run Code Online (Sandbox Code Playgroud)
在这个例子中,两者给出了相同的答案.但我更喜欢使用__CODE__
.专家的任何建议.谢谢.
__CODE__
我正在进行临床信息规范化(拼写检查),其中我检查每个给定的单词对900,000字的医学词典.我更关注时间复杂度/性能.
在这种情况下,你认为两者都表现相似吗?
如何使用Perl检查给定字符串是否包含某个子字符串?
更具体地说,我想看看s1.domain.com
给定的字符串变量中是否存在.
是否可以在PostgreSQL中搜索每个表的每一列中的特定值?
Oracle 提供了类似的问题.
我正在寻找一个模糊搜索JavaScript库来过滤数组.我已经尝试过使用fuzzyset.js和fuse.js,但结果非常糟糕(你可以尝试在链接页面上进行演示).
在对Levenshtein距离进行一些阅读之后,它让我感到很难接近用户在打字时所寻找的内容.对于那些不知道的人,系统会计算需要多少插入,删除和替换才能使两个字符串匹配.
在Levenshtein-Demerau模型中固定的一个明显的缺陷是blub和boob被认为与灯泡同样相似(每个需要两次替换).然而,很明显,灯泡更像blub而不是bob,而我刚才提到的模型通过允许换位来识别它.
我想在文本完成的上下文中使用它,所以如果我有一个数组['international', 'splint', 'tinder']
,并且我的查询是int,我认为国际应该比夹板排名更高,即使前者的得分(更高=更差)为10与后者的3相比.
所以我正在寻找(并且如果它不存在则会创建),是一个执行以下操作的库:
有没有人遇到这样的事情?我意识到StackOverflow不是要求软件推荐的地方,但上面隐含的(不再是!)是:我正在考虑这个正确的方法吗?
我找到了一篇关于这个主题的好文章(pdf).一些注释和摘录:
仿射编辑距离函数为插入或删除序列分配相对较低的成本
Monger-Elkan距离函数(Monge&Elkan 1996),它是Smith-Waterman距离函数的一个仿射变体(Durban et al.1998),具有特定的成本参数
对于Smith-Waterman距离(维基百科),"Smith-Waterman算法不是查看总序列,而是比较所有可能长度的片段,并优化相似性度量." 这是n-gram方法.
Jaro度量标准(Jaro 1995; 1989; Winkler 1999)是一个大致相似的度量标准,它不是基于编辑距离模型.在记录链接文献中,使用该方法的变体获得了良好的结果,该方法基于两个字符串之间的共同字符的数量和顺序.
Winkler(1999)的变体也使用了最长公共前缀的长度P.
(似乎主要用于短字符串)
出于文本完成的目的,Monger-Elkan和Jaro-Winkler方法似乎最有意义.Winkler对Jaro指标的补充有效地加重了单词的开头.而Monger-Elkan的仿射方面意味着完成一个单词的必要性(这只是一系列的补充)不会太过不喜欢它.
结论:
TFIDF排名在几个基于令牌的距离度量中表现最佳,Monge和Elkan提出的调整的仿射间隙编辑距离度量在几个字符串编辑距离度量中表现最佳.一个令人惊讶的好距离度量是一种快速的启发式方案,由Jaro提出,后来由Winkler扩展.这几乎与Monge-Elkan方案一样,但速度提高了一个数量级.组合TFIDF方法和Jaro-Winkler的一种简单方法是使用基于Jaro-Winkler方案的近似令牌匹配替换TFIDF中使用的确切令牌匹配.这种组合平均比Jaro-Winkler或TFIDF略好,并且偶尔表现得更好.对于本文中考虑的几个最佳指标的学习组合,它的性能也很接近.
javascript regex fuzzy-search pattern-matching string-matching
给定一个值我想验证它是否有效年份.我的标准很简单,其值应为带4
字符的整数.我知道这不是最好的解决方案,因为它不会允许多年,1000
并且会允许多年如此5000
.这个标准适合我目前的情况.
我想出的是
\d{4}$
虽然这有效但它也允许负值.
如何确保只允许正整数?
string-matching ×10
regex ×4
string ×4
javascript ×3
fuzzy-search ×2
python ×2
substring ×2
contains ×1
difflib ×1
grep ×1
match ×1
perl ×1
php ×1
postgresql ×1
ranking ×1
similarity ×1
validation ×1