当前位置:  开发笔记 > 后端 > 正文

如何使用正则表达式对列表元素进行排序?

如何解决《如何使用正则表达式对列表元素进行排序?》经验,为你挑选了1个好方法。



1> Aleksei Mati..:
? list.sort_by { |s| s[/(?<=\d\d-\d\d\d\s).*?(?=ul.)/] }
#? [
#  [0] "Urz?d Skarbowy 59-700 Boles?awiec ul. Garncarska 10",
#  [1] "Urz?d Skarbowy 57-500 Bystrzyca K?odzka ul. Adama Mickiewicza 5",
#  [2] "Urz?d Skarbowy 58-200 Dzier?oniów ul. Pocztowa 14",
#  [3] "Urz?d Skarbowy 67-200 G?ogów ul. Adama Mickiewicza 53"
# ]

请注意,上面的正则表达式假设您具有ul.街道名称终止符.可能在大多数情况下,使用街道名称中的第一个单词(或者发明更复杂的终结符)是安全的.

? list.sort_by { |s| s[/(?<=\d{2}-\d{3}\s)\w+/] }

UPD联合收割机:

? list.sort_by do |s| 
?   s[/(?<=\d\d-\d\d\d\s).*?(?=ul.)/] || \ # try to catch `ul.`
?   s[/(?<=\d{2}-\d{3}\s)\p{Alpha}+/] || \ # no worries, use first word
?   '' # OK, failed to catch anything
? end

请注意\p{Alpha}匹配器,\w因变音符号而无法在这里工作.

NB我想的越多,我就越相信如果没有ul.被捕获,它应该按匹配排序直到字符串的结尾:

? list.sort_by do |s| 
?   (s[/(?<=\d\d-\d\d\d\s).*?(?=ul.)/] || s[/(?<=\d{2}-\d{3}\s).+?$/]).strip
? end

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有