我想编写一个实用程序函数/模块,它将为字符串提供简单的通配符/ glob匹配.我没有使用正则表达式的原因是用户将最终使用某种配置文件提供匹配的模式.我找不到任何这样稳定的宝石 - 试过小丑,但是设置有问题.
我正在寻找的功能很简单.例如,给定以下模式,以下是匹配:
pattern | test-string | match
========|=====================|====================
*hn | john, johnny, hanna | true , false, false # wildcard , similar to /hn$/i
*hn* | john, johnny, hanna | true , true , false # like /hn/i
hn | john, johnny, hanna | false, false, false # /^hn$/i
*h*n* | john, johnny, hanna | true , true , true
etc...
Run Code Online (Sandbox Code Playgroud)
我希望这样做尽可能高效.我考虑过从模式字符串创建正则表达式,但这在运行时似乎效率很低.有关此实施的任何建议吗?谢谢.
编辑:我正在使用ruby 1.8.7
我正在考虑构建一个API,让程序提交学术出版物的"指纹",将其与Open Access期刊的文章数据库相匹配,如果找到,则向用户发送规范引文信息.最初这将是一个特定的小型研究领域,所以它不一定需要处理2000万篇论文才能获得成功(即使该领域最常引用的1000篇论文被覆盖,这对生产力来说也是一个巨大的好处和合作).
我想知道哪个库(理想情况下能与Ruby接口)最适合做这个"指纹识别".我已经看过Lucene的模糊匹配,但这似乎适用于单词级别,而在这种情况下,我们可能想要提交更大的文档子集.进行模糊匹配的原因是有些人可能有Word.doc预印本,有些人可能有最终的PDF等.
我真的很感激这里的一些想法.谷歌搜索"感性哈希"让我进入一堆新材料.我试着在这里总结一下我的许多发现.
为什么以下评估为True?
Dim result = "b" Like "*a*b"
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑:
为了概括这一点,以下返回True:
"String1" Like "*AnyText1*AnyText2*AnyText???******????*String1"
Run Code Online (Sandbox Code Playgroud)
VBA正常工作,返回False.
PowerShell正常工作,返回False:
PS C:\Users\XXX> "b" -Like "*a*b"
False
Run Code Online (Sandbox Code Playgroud)
EDIT2:
错误报告的链接:https:
//connect.microsoft.com/VisualStudio/feedback/details/748415/a-bug-in-net-like-operator
我正在处理大量数据,主要是非英文字符的名称.我的目标是将这些名称与在美国收集的一些信息相匹配.
也就是说,我可能希望将名称'Sølvsten'(从某些名称列表)与'Soelvsten'(存储在某些美国数据库中的名称)相匹配.这是我写的一个函数来做这件事.它显然很笨拙,有点随意,但我想知道是否有一个简单的R函数将这些外来字符转换为最近的英国邻居.我知道可能没有任何标准的方法来进行这种转换,但我只是好奇是否有转换可以通过R函数完成.
# a function to replace foreign characters
replaceforeignchars <- function(x)
{
require(gsubfn);
x <- gsub("š","s",x)
x <- gsub("œ","oe",x)
x <- gsub("ž","z",x)
x <- gsub("ß","ss",x)
x <- gsub("þ","y",x)
x <- gsub("à","a",x)
x <- gsub("á","a",x)
x <- gsub("â","a",x)
x <- gsub("ã","a",x)
x <- gsub("ä","a",x)
x <- gsub("å","a",x)
x <- gsub("æ","ae",x)
x <- gsub("ç","c",x)
x <- gsub("è","e",x)
x <- gsub("é","e",x)
x <- gsub("ê","e",x)
x <- gsub("ë","e",x)
x <- gsub("ì","i",x)
x <- gsub("í","i",x)
x <- gsub("î","i",x)
x <- gsub("ï","i",x)
x <- gsub("ð","d",x) …Run Code Online (Sandbox Code Playgroud) 我想比较JavaScript中的两个字符串来测试它们是否完全相同.哪种方式最好(最快)?
现在,我正在考虑
if(string1.localeCompare(string2) == 0) {}
Run Code Online (Sandbox Code Playgroud)
或者干脆
if(string1 == string2)
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
我有一个简单的正则表达式:
[A-z]{2}[0-9]{3})$/g 在以下内容中:
regForm.submit(function(){
if ($.trim($('#new-usr').val()).match(/([A-z]{2}[0-9]{3})$/g)) {
alert('No');
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
这是正确阅读的东西,如'ab123'提供警报,'ab1234'但没有.但是,'abc123'仍在抛出警报.我需要它,所以当它只有2个字母后跟三个数字时才会发出警报.
我有一个以下形式的文件:
interesting text-MIB blah blah blah
VERY INTERESTING TEXT
interesting text-MIB blah blah blah
Run Code Online (Sandbox Code Playgroud)
在包含"-MIB"字符串的每一行中,我想删除该字符串后面的文本,直到该行的结尾.
以下命令似乎按预期工作:
sed -i -n -e 's/-MIB.*$/-MIB/p' ./myfile
Run Code Online (Sandbox Code Playgroud)
我的问题是它还删除了找不到我的模式的行.这里,"非常有趣的文字"这一行将被删除.我对sed并不熟悉.我究竟做错了什么?是否适合这种治疗方法?
是否有一个函数检查字符串是否以某个子字符串结尾?Python有endswith:
>>> "victory".endswith("tory")
True
Run Code Online (Sandbox Code Playgroud) 我正在尝试在两个数据集之间的R中进行模糊逻辑联接:
config我想使用该name列在两个数据集之间进行联接。但是,该name列在数据集中可能包含其他字符或前导字符,或者在较大的单词内部包含一个单词。因此,例如,如果我们查看这两个数据集,我希望名称OPAL加入OPALAS,而SAUSALITO Y加入SAUSALITO。
Dataset1:
Name Config
ALTO D BB
CONTRA ST
EIGHT A DD
OPALAS BB
SAUSALITO Y AA
SOLANO J ST
Dataset2:
Name Age Rank
ALTO D 50 2
ALTO D 20 6
CONTRA 10 10
CONTRA 15 15
EIGHTH 18 21
OPAL 19 4
SAUSALITO 2 12
SOLANO 34 43
Run Code Online (Sandbox Code Playgroud)
数据集2汇总代码
Data2a <- summaryBy(Age ~ Name,FUN=c(mean), data=Data2,na.rm=TRUE)
Data2b <- summaryBy(Rank ~ Name,FUN=c(sum), data=Data2,na.rm=TRUE)
Data2 <- data.frame(Data2a$Name, Data2a$Age.mean, Data2b$Rank.sum)
Desired Outcome:
Name …Run Code Online (Sandbox Code Playgroud) string-matching ×10
string ×3
javascript ×2
r ×2
ruby ×2
.net ×1
elisp ×1
emacs ×1
fingerprint ×1
fuzzy-logic ×1
glob ×1
join ×1
line ×1
python ×1
regex ×1
sed ×1
sql-like ×1
substring ×1
vb.net ×1
wildcard ×1