标签: pattern-matching

如何将重音字符与正则表达式匹配?

我正在运行Ruby on Rails 3.0.10和Ruby 1.9.2.我使用以下正则表达式来匹配名称:

NAME_REGEX = /^[\w\s'"\-_&@!?()\[\]-]*$/u

validates :name,
  :presence   => true,
  :format     => {
    :with     => NAME_REGEX,
    :message  => "format is invalid"
  }
Run Code Online (Sandbox Code Playgroud)

但是,如果我试图保存一些像下面这样的词:

Oilalà
Pì
Rùby
...

# In few words, those with accented characters
Run Code Online (Sandbox Code Playgroud)

我有一个验证错误"Name format is invalid..

我怎样才能改变上述正则表达式,从而匹配等也重音符号à,è,é,ì,ò,ù,...?

ruby regex ruby-on-rails pattern-matching ruby-on-rails-3

32
推荐指数
1
解决办法
3万
查看次数

Python正则表达式字符串匹配?

我有一段时间试图将我的javascript正则表达式转换为Python.

我只是想让这个工作:

print(re.match('e','test'))
Run Code Online (Sandbox Code Playgroud)

...但它打印无.如果我做:

print(re.match('e','est'))
Run Code Online (Sandbox Code Playgroud)

它匹配...它默认匹配字符串的开头吗?匹配时,如何使用结果?

如何进行第一场比赛?是否有比python网站提供的更好的文档?

python regex pattern-matching

32
推荐指数
2
解决办法
4万
查看次数

Swift 2 - "if"中的模式匹配

最近我看到了Apple的2015年WWDC主题演讲.我也查看了一些文档,但是我找不到"if if pattern"部分,它是如何写在他们展示的幻灯片上的.(来自Apple Events的 68分00秒视频)

你知道这是指什么吗?还是语法?

syntax if-statement pattern-matching swift swift2

32
推荐指数
1
解决办法
1万
查看次数

在scala中多次分配非元组

只是为了澄清,当我说多个分配,并行分配,解构绑定我的意思是以下模式匹配宝石

scala> val (x,y) = Tuple2("one",1)
x: java.lang.String = one
y: Int = 1
Run Code Online (Sandbox Code Playgroud)

其分配"one"x1y.

我试图做

val (x,y) = "a b".split()
Run Code Online (Sandbox Code Playgroud)

我期望scala会尝试将模式与模式进行模式匹配,如果数组的长度与模式的长度不匹配,则会抛出运行时异常.

我所有试图轻松转换Array为a的尝试Tuple2都是徒劳的.

scala> Tuple2(Array(1,2):_*)
<console>:7: error: wrong number of arguments for method apply: (T1,T2)(T1, T2)
in object Tuple2
       Tuple2(Array(1,2):_*)
       ^

scala> Tuple2(Array(1,2).toList:_*)
<console>:7: error: wrong number of arguments for method apply: (T1,T2)(T1, T2)
in object Tuple2
       Tuple2(Array(1,2).toList:_*)
Run Code Online (Sandbox Code Playgroud)

有没有任何巧妙的方法来使用数组或列表的多个赋值?

arrays functional-programming scala pattern-matching variable-assignment

31
推荐指数
3
解决办法
8647
查看次数

匹配产品字符串的最佳机器学习技术

这是一个难题......

我有两个相同50000+电子产品的数据库,我想将一个数据库中的产品与另一个数据库中的产品相匹配.但是,产品名称并不总是相同的.我已经尝试使用Levenshtein距离来测量弦的相似性但是这没有用.例如,

-LG 42CS560 42-Inch 1080p 60Hz LCD HDTV
-LG 42 Inch 1080p LCD HDTV
Run Code Online (Sandbox Code Playgroud)

这些项目是相同的,但他们的产品名称变化很大.

另一方面...

-LG 42 Inch 1080p LCD HDTV
-LG 50 Inch 1080p LCD HDTV
Run Code Online (Sandbox Code Playgroud)

这些是具有非常相似产品名称的不同产品.

我该如何解决这个问题?

machine-learning pattern-matching string-comparison levenshtein-distance

31
推荐指数
2
解决办法
2万
查看次数

必须完全知道匿名函数的参数类型.(SLS 8.5)

我有一个函数文字

{case QualifiedType(preds, ty) =>
               t.ty = ty ;
               Some((emptyEqualityConstraintSet,preds)) }
Run Code Online (Sandbox Code Playgroud)

这会导致错误消息

missing parameter type for expanded function The argument types of an anonymous function
must be fully known. (SLS 8.5) Expected type was:
? => Option[(Typer.this.EqualityConstraintSet, Typer.this.TypeRelationSet)]
Run Code Online (Sandbox Code Playgroud)

我查看了SLS 8.5,但未找到解释.

如果我自己扩展功能

{(qt : QualifiedType) =>
  qt match {case QualifiedType(preds, ty) =>
               t.ty = ty ;
               Some((emptyEqualityConstraintSet,preds)) }}
Run Code Online (Sandbox Code Playgroud)

错误消失了.

(a)为什么这是一个错误?

(b)我该怎么做才能解决这个问题?

我尝试了明显的修复,即: QualifiedType在模式和=>之间添加,但这是一个语法错误.


我注意到的一件事是上下文有所不同.如果我使用函数literal作为声明为期望a的函数的参数QualifiedType => B,则没有错误.但是如果我将它用作期望a的函数的参数A => B,则会出现错误.我希望这里发生的事情是,由于模式可以想象应用于类型为QualifiedType的超类型的对象,编译器不愿意在不保证函数不会应用于的情况下分配明显的类型.任何不是QualifiedType的东西.我真正想要的是能够写出{QualifiedType( preds, ty) => ...} …

lambda scala function-literal pattern-matching

31
推荐指数
2
解决办法
2万
查看次数

什么是Axiom K?

我注意到自从HoTT以来,"Axiom K"的讨论经常出现.我相信它与模式匹配有关.我很惊讶我在TAPL,ATTAPL或PFPL中找不到参考.

  • 什么是Axiom K?
  • 它是否用于ML样式的模式匹配,如SML(或只是依赖模式匹配)?
  • 什么是Axiom K的适当参考?

programming-languages pattern-matching agda dependent-type

31
推荐指数
1
解决办法
1617
查看次数

为什么GADT /存在数据构造函数不能用于惰性模式?

今天,当在存在的GADT构造函数上进行匹配时,尝试使用延迟模式时出现编译器错误:

存在或GADT数据构造函数不能在惰性(〜)模式中使用

为什么会有这种限制?如果被允许,会发生什么"坏"的事情?

haskell pattern-matching lazy-evaluation existential-type gadt

30
推荐指数
2
解决办法
703
查看次数

如何使用LIKE执行区分大小写的搜索?

我正在尝试查找包含大写6个或更多字母数字字符串的记录.一些例子:

PENDING  3RDPARTY  CODE27
Run Code Online (Sandbox Code Playgroud)

我正在使用以下声明:

SELECT Details
FROM MyTable
WHERE Details LIKE '%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%';
Run Code Online (Sandbox Code Playgroud)

这将返回包含任何6个或更多字母单词的所有记录,无论大小写如何.

我添加了一个COLLATE声明:

SELECT Details
FROM MyTable
WHERE Details COLLATE Latin1_General_CS_AS LIKE '%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%';
Run Code Online (Sandbox Code Playgroud)

这没有任何改变.无论如何,它仍会返回带有6个或更多字母单词的记录.

就像测试一样,我试过:

SELECT Details
FROM MyTable
WHERE Details COLLATE Latin1_General_CS_AS LIKE '%pending%';

SELECT Details
FROM MyTable
WHERE Details COLLATE Latin1_General_CS_AS LIKE '%PENDING%';
Run Code Online (Sandbox Code Playgroud)

这两种方法都有效,分别返回包含"待定"和"待定"的记录.所以问题似乎是LIKE克劳斯的模式匹配.

如何执行区分大小写的搜索?

pattern-matching collate sql-server-2008 sql-like

30
推荐指数
2
解决办法
3万
查看次数

如何在没有模式匹配的情况下比较枚举

我想申请filter一个迭代器,我想出了这个并且它可以工作,但它超级详细:

.filter(|ref my_struct| match my_struct.my_enum { Unknown => false, _ => true })
Run Code Online (Sandbox Code Playgroud)

我宁愿写这样的东西:

.filter(|ref my_struct| my_struct.my_enum != Unknown)
Run Code Online (Sandbox Code Playgroud)

这给了我一个编译错误

binary operation `!=` cannot be applied to type `MyEnum`
Run Code Online (Sandbox Code Playgroud)

有冗长模式匹配的替代方案吗?我寻找一个宏但找不到合适的宏.

enums pattern-matching rust

30
推荐指数
4
解决办法
2万
查看次数