扫描(/ \ p {graph} + /)和日期

时间:2012-10-01 14:22:45

标签: ruby regex

当我使用scan(/\p{graph}+/)时,它可以工作:

"ich gehe nach Köln am 12.09.2012".scan(/\p{graph}+/)
=> ["ich", "gehe", "nach", "Köln", "am", "12.09.2012"]

但如果出现类似“Köln.am”的输入错误,则输出错误:

"ich gehe nach Köln.am 12.09.2012".scan(/\p{graph}+/)
=> ["ich", "gehe", "nach", "Köln.am", "12.09.2012"]

当我使用scan(/\p{alnum}+/)时,日期不正确:

"ich gehe nach Köln.am 12.09.2012".scan(/\p{alnum}+/)
=> ["ich", "gehe", "nach", "Köln", "am", "12", "09", "2012"]

有人知道另一种解决方案吗?

2 个答案:

答案 0 :(得分:0)

对于这个简单的情况,您可以使用替换进行检查,并匹配一系列字母或带点的一系列数字。

"ich gehe nach Koeln.am 12.09.2012".scan(/\p{alpha}+|[\d+.]+/)

输出:

["ich", "gehe", "nach", "Koeln", ".", "am", "12.09.2012"]

或者,如果您不想匹配单点

"ich gehe nach Koeln.am 12.09.2012".scan(/\p{alpha}+|\d+(?:\.\d+)*/)

输出:

["ich", "gehe", "nach", "Koeln", "am", "12.09.2012"]

答案 1 :(得分:-1)

我不确定你想要什么结果,所以我的答案可能不正确。

"ich gehe nach Köln am 12.09.2012".split /\s/
 => ["ich", "gehe", "nach", "Köln", "am", "12.09.2012"]

编辑:

请注意,连续几个空格会破坏结果。

"ich gehe nach Köln        am 12.09.2012".split /\s/
 => ["ich", "gehe", "nach", "Köln", "", "", "", "", "", "", "", "am", "12.09.2012"]