Tag: expression式

正则expression式是编程必须的吗?

正则expression式是编程必须的吗?

有意义的Javascript模糊search

我正在寻找一个模糊searchJavaScript库来过滤一个数组。 我试过使用fuzzyset.js和fuse.js ,但结果是可怕的(有演示你可以尝试在链接的页面)。 在对Levenshtein距离进行了一些阅读之后,我觉得这是对用户input内容的一种不好的估计。 对于那些不知道的人,系统会计算出两个string匹配需要多less个插入 , 删除和replace 。 在Levenshtein-Demerau模型中固定的一个明显的缺陷是blub和boob被认为与bulb相似(每个都需要两个replace)。 然而,很清楚的是, 灯泡比胸部更接近巴巴 ,我刚才提到的模型认识到,允许换位 。 我想在文本完成的情况下使用它,所以如果我有一个数组['international', 'splint', 'tinder'] ,我的查询是int ,我认为国际应该比夹板更高,甚至尽pipe前者的得分(较高=较差)为10,而后者为3。 所以我正在寻找(如果不存在,将会创build)是一个库,它执行以下操作: 权衡不同的文本操作 每个操作的权重取决于它们在单词中出现的位置(早期操作比后期操作更昂贵) 返回按相关性sorting的结果列表 有没有人遇到过这样的事情? 我意识到,StackOverflow不是要求软件推荐的地方,而是隐含的(不再是!)在上面是:我想这是正确的方式吗? 编辑 我find了关于这个问题的好文章(pdf) 。 一些笔记和摘录: 仿射编辑距离函数为插入或删除序列分配相对较低的成本 Monger-Elkan距离函数(Monge&Elkan 1996)是Smith-Waterman距离函数的仿射变体(Durban et al。1998),具有特定的成本参数 对于Smith-Waterman距离(维基百科) ,“Smith-Watermanalgorithm不是查看总序列,而是比较所有可能长度的片段,并优化相似性度量。 这是n-gram方法。 一个非基于编辑距离模型的广泛相似的度量是Jaro度量(Jaro 1995; 1989; Winkler 1999)。 在logging连接文献中,使用这种方法的变体已经获得了良好的结果,该变体基于两个string之间的共同字符的数量和顺序。 由于Winkler(1999)的这种变化也使用了最长公共前缀的长度P. (似乎主要用于短string) 为了完成文本,Monger-Elkan和Jaro-Winkler方法似乎是最有意义的。 温克勒对Jaro度量的join有效地加重了单词的开始。 而Monger-Elkan的亲切的方面意味着完成一个单词(这只是一系列加法)的必要性不会太过分。 结论: 在几个基于令牌的距离度量中TFIDF排名performance最好,Monge和Elkan提出的调整后的仿射间距编辑距离度量在几个string编辑距离度量中performance最好。 一个令人惊讶的好距离度量是一个快速启发式scheme,由Jaro提出,后来由Winkler进行了扩展。 这种方法几乎和Monge-Elkanscheme一样,但速度要快一个数量级。 结合TFIDF方法和Jaro-Winkler的一个简单方法是用基于Jar-Winklerscheme的近似令牌匹配replaceTFIDF中使用的确切的令牌匹配。 平均来说,这个组合的performance稍好于Jaro-Winkler或TFIDF,偶尔performance会好得多。 在本文中考虑的几个最好的度量的学习组合也是接近的。

如何在Node.js中最好地创build一个RESTful API

我是Node的初学者(通常是所有的后端Web开发),并且我已经开始在Node中编写一个RESTful API。 有几件事情我正试图让我的头脑。 我的应用程序使用Express和Mongoose,并使用express-resource模块轻松创build我的API资源的CRUD路由。 但是有一些我不高兴的事情,并认为我可以做得更好。 首先是mongoose。 如果我想为我的API编写testing,我没有办法将Mongoose强制存储到内存中。 所有的教程似乎指向mongoose,但是,我真的不知道我应该使用什么。 其次,我的资源似乎有很多样板代码。 这真的是在Node.js中创buildRESTful API的最好方法吗? 还有其他模块,可以帮助我创build我的CRUD路线吗? 我相信有一些方法可以直接从你的模式创buildCRUD路线,而不需要代码,但我真的不知道如何。 我已经看到了像Tower.js和CompoundJS(正式的RailwayJS)这样的项目,似乎这些解决scheme比我的问题解决得更多。 也许我应该使用它们,但我真的只想要Node.js应用程序是一个API,没有更多。 我正在处理独立于API的前端。 为了提供一些背景,这里是我目前的情况。 目前,我有一个在Mongoose中定义的模型: var mongoose = require('mongoose') , Schema = mongoose.Schema , Link var LinkSchema = new Schema({ uri: String, meta: { title: String, desc: String }, shares: [{ uid: Schema.Types.ObjectId, date: Date, message: String }] }) Link = module.exports […]

为什么VIM有自己的正则expression式语法?

为什么你必须使你的正则expression式“非常神奇”,所以你不必逃避你的捕获报价? 如果你把自己的环境变得非常神奇,那么你就是非标准的,可能会有合规问题。 我只是想知道为什么VIM使用不同的正则expression式语法比说,Perl?

用于假人的expression树?

我是这种情况下的假人。 我试图在谷歌上看到这些是什么,但我只是不明白。 有人能给我一个简单的解释,说明他们是什么,为什么他们有用吗? 编辑:我正在谈论.NET中的LINQfunction。

Emacs:正则expression式replace换个案例

每隔一段时间我想要replace所有值的实例,如: <BarFoo> 同 <barfoo> 即做一个正则expression式replace尖括号内的所有东西与小写等价。 任何人都有一个很好的Lisp的片段呢? 假设我们只处理ASCII值是安全的。 加分指向任何足够通用的东西以获取完整的正则expression式,而不仅仅处理尖括号示例。 甚至更多的奖励点,只是使用Mx query-replace-regexp的答案。 谢谢, 大教堂

如何从string中去除非字母数字字符(包括空格)?

如何从string中去除非字母数字字符并在C#中用Replacereplace空格? 我想保持az,AZ,0-9,没有什么更多(甚至没有“空格”)。 "Hello there(hello#)".Replace(regex-i-want, ""); 应该给 "Hellotherehello" "Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", "");我试过了"Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", ""); 但空间仍然存在。

正则expression式可选词匹配

我试图创build一个提取歌手,作词者的正则expression式。 我想知道如何使歌词search可选。 示例多行string: Fireworks Singer: Katy Perry Vogue Singers: Madonna, Karen Lyricist: Madonna 正则expression式:/ /Singers?:(.\*)\s?Lyricists?:(.\*)/ :(. /Singers?:(.\*)\s?Lyricists?:(.\*)/ :(. /Singers?:(.\*)\s?Lyricists?:(.\*)/ 这匹配正确的第二行,并提取Singers(Madonna, Karen)和Lyricists(Madonna) 但是当没有歌词的时候,它不适用于第一行。 如何使歌词search可选?

egrep和grep的区别

我有一个有关grep和egrep在unix 。 正如我最近在unix研究shell commands ,我想知道grep和egrep之间有什么区别。 我发现我们可以用正则expression式来使用grep和egrep。 但是,我发现这两个命令之间有些不同: 对于^ ,grep和egrep具有相同的含义,即在一开始就发现这些行包含给定的东西。 但是,对于| ,grep,在前面没有反斜杠| ,意味着|字符 ,如果我在它前面放一个斜杠,就会发现find这行的特殊含义,它包含前面和后面的东西。 但是,egrep,这是相反的。 | 具有grep和\|的后面的意思 在使用它时有grep的以前的意思。 其他人可以解释一下为什么?

你如何将这个正则expression式成语从Perl翻译成Python?

大约一年前我从Perl切换到Python,并没有回头。 只有一个成语,我发现我可以在Perl比Python更容易做到: if ($var =~ /foo(.+)/) { # do something with $1 } elsif ($var =~ /bar(.+)/) { # do something with $1 } elsif ($var =~ /baz(.+)/) { # do something with $1 } 相应的Python代码不是很优雅,因为if语句不断变得嵌套: m = re.search(r'foo(.+)', var) if m: # do something with m.group(1) else: m = re.search(r'bar(.+)', var) if m: # […]