Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby-使用正则表达式在字符串中查找城市名称_Ruby_Regex - Fatal编程技术网

Ruby-使用正则表达式在字符串中查找城市名称

Ruby-使用正则表达式在字符串中查找城市名称,ruby,regex,Ruby,Regex,我想知道如何使用正则表达式从字符串数组中提取城市名称。以下是字符串的格式: City of Covina Police Department, Covina, CA 91728 现在我通过循环每个字符串来提取州缩写,然后循环一系列美国州缩写,看看字符串是否包含其中一个,如下所示: states = [my array of states] string = the current string from the array states.each do |state| if strin

我想知道如何使用正则表达式从字符串数组中提取城市名称。以下是字符串的格式:

City of Covina Police Department, Covina, CA 91728
现在我通过循环每个字符串来提取州缩写,然后循环一系列美国州缩写,看看字符串是否包含其中一个,如下所示:

states = [my array of states]
string = the current string from the array
states.each do |state|
    if string.include?(state)
        counter[state] += 1
    end
end
根据字符串的格式,如何使用正则表达式在每个字符串中查找城市?我在想,因为我已经找到了州,因为城市总是在州的前面,我应该能够用这个来找到它,但是我对正则表达式不是很精通,所以我在回答这个问题时遇到了麻烦。有什么想法吗?

如果:

  • 城市名称总是用逗号和括号括起来
  • 城市名称后面的逗号是行中的最后一个逗号
然后你可以写:

str.split(',')[-2].strip
示例:

str = "City of Covina Police Department, Covina, CA 91728"
str.split(',')[-2].strip #=> "Covina" 

str = "City of Covina, Police Department, Covina, CA 91728"
str.split(',')[-2].strip #=> "Covina" 

我不是从美国来的,所以我不知道州代码是否总是格式为XX,邮政编码总是5位数,但基于这个假设。给你

/\w+(?=, \w{2} \d{5}$)/
(?=…$)
是字符串结尾的正向前瞻

\w{2}
状态代码


\d{5}
邮政编码

我也不住在美国,但我认为邮政编码可以是
98230
98230-1234
,因此您可能需要添加
(?:-\d{4})?
。另外,状态缩写总是两个大写字母,因此可能
[A-Z]{2}
。假设需要正则表达式,这就是所谓的。可能存在非正则表达式的解决方案,所以只需假设您想要提取城市名称。最重要的是行格式。你说“这是字符串的格式”。如果所有字符串每行都有两个逗号,且城市名称之间没有其他字符(或者如果行中的最后两个逗号围绕城市名称),则解决方案很简单,因此您应该说明是否是这样。如果不是,您需要精确地描述行格式中可能的变化。请通过编辑详细说明,而不是试图在评论中解释。