从JSON中提取位置名称

时间:2015-12-30 13:36:20

标签: regex quotes

鉴于此文 {"coord":{"lon":0.55,"lat":51.39},"weather":[{"id":501,"main":"Rain","description":"moderate rain","icon":"10d"}],"base":"cmc stations","main":{"temp":285.81,"pressure":1011,"humidity":62,"temp_min":284.45,"temp_max":287.15},"wind":{"speed":11.3,"deg":170},"rain":{"1h":2.03},"clouds":{"all":20},"dt":1451480087,"sys":{"type":1,"id":5094,"message":0.0039,"country":"GB","sunrise":1451462577,"sunset":1451491082},"id":2648657,"name":"Gillingham","cod":200}

我正在尝试仅提取位置的名称(不带引号),在本例中为Gillingham。

我对正则表达式并不擅长并尝试搜索\"name":\".*"而没有结果。

3 个答案:

答案 0 :(得分:3)

我认为正则表达式不是你的最佳选择。您正在阅读JSON格式文件。因此,最好使用内置库将JSON读入数据结构,然后以伪代码读取“name”属性:

city = deserializeJson(JSONdataFIle.read)["name"]

一个快速的伎俩是:

city = filter (in CITIES) JsonData.splitInWords

答案 1 :(得分:0)

http://txt2re.com/

在这种情况下,我不会说这是最好的解决方案,但它是一个。它是我经常用来从文本中提取文本的网站,该文本具有一致的模式。使用该站点,我得到了下面的Java代码。如果这不是您现在正在寻找的,那么您应该将该网站加入书签,以便稍后在您的软件开发工具中使用。对我来说,我所做的只是将你的文字粘贴到网站上,按显示匹配,左键单击“word”作为你的城市名称,然后按下Java标签。然后生成代码以供我复制和粘贴。 如果您复制并粘贴此代码并在您选择的IDE中将其作为Java主类运行,您将看到您的城市名称结果;但是,只有在您过滤的内容的格式是一致的情况下,这才有效。如果您正在处理要解析的数据,那么Java不是用于文本解析的最有效语言。像Perl这样的语言对此有好处。但是,如今拥有高端计算能力,则取决于您的需求。

import java.util.regex。*;

public class Main
{
  public static void main(String[] args)
  {
    String txt="{\"coord\":{\"lon\":0.55,\"lat\":51.39},\"weather\":[{\"id\":501,\"main\":\"Rain\",\"description\":\"moderate rain\",\"icon\":\"10d\"}],\"base\":\"cmc stations\",\"main\":{\"temp\":285.81,\"pressure\":1011,\"humidity\":62,\"temp_min\":284.45,\"temp_max\":287.15},\"wind\":{\"speed\":11.3,\"deg\":170},\"rain\":{\"1h\":2.03},\"clouds\":{\"all\":20},\"dt\":1451480087,\"sys\":{\"type\":1,\"id\":5094,\"message\":0.0039,\"country\":\"GB\",\"sunrise\":1451462577,\"sunset\":1451491082},\"id\":2648657,\"name\":\"Gillingham\",\"cod\":200}";

    String re1=".*?";   // Non-greedy match on filler
    String re2="(?:[a-z][a-z]+)";   // Uninteresting: word
    String re3=".*?";   // Non-greedy match on filler
    String re4="(?:[a-z][a-z]+)";   // Uninteresting: word
    String re5=".*?";   // Non-greedy match on filler
    String re6="(?:[a-z][a-z]+)";   // Uninteresting: word
    String re7=".*?";   // Non-greedy match on filler
    String re8="(?:[a-z][a-z]+)";   // Uninteresting: word
    String re9=".*?";   // Non-greedy match on filler
    String re10="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re11=".*?";  // Non-greedy match on filler
    String re12="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re13=".*?";  // Non-greedy match on filler
    String re14="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re15=".*?";  // Non-greedy match on filler
    String re16="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re17=".*?";  // Non-greedy match on filler
    String re18="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re19=".*?";  // Non-greedy match on filler
    String re20="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re21=".*?";  // Non-greedy match on filler
    String re22="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re23=".*?";  // Non-greedy match on filler
    String re24="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re25=".*?";  // Non-greedy match on filler
    String re26="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re27=".*?";  // Non-greedy match on filler
    String re28="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re29=".*?";  // Non-greedy match on filler
    String re30="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re31=".*?";  // Non-greedy match on filler
    String re32="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re33=".*?";  // Non-greedy match on filler
    String re34="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re35=".*?";  // Non-greedy match on filler
    String re36="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re37=".*?";  // Non-greedy match on filler
    String re38="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re39=".*?";  // Non-greedy match on filler
    String re40="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re41=".*?";  // Non-greedy match on filler
    String re42="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re43=".*?";  // Non-greedy match on filler
    String re44="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re45=".*?";  // Non-greedy match on filler
    String re46="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re47=".*?";  // Non-greedy match on filler
    String re48="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re49=".*?";  // Non-greedy match on filler
    String re50="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re51=".*?";  // Non-greedy match on filler
    String re52="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re53=".*?";  // Non-greedy match on filler
    String re54="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re55=".*?";  // Non-greedy match on filler
    String re56="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re57=".*?";  // Non-greedy match on filler
    String re58="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re59=".*?";  // Non-greedy match on filler
    String re60="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re61=".*?";  // Non-greedy match on filler
    String re62="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re63=".*?";  // Non-greedy match on filler
    String re64="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re65=".*?";  // Non-greedy match on filler
    String re66="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re67=".*?";  // Non-greedy match on filler
    String re68="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re69=".*?";  // Non-greedy match on filler
    String re70="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re71=".*?";  // Non-greedy match on filler
    String re72="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re73=".*?";  // Non-greedy match on filler
    String re74="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re75=".*?";  // Non-greedy match on filler
    String re76="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re77=".*?";  // Non-greedy match on filler
    String re78="(?:[a-z][a-z]+)";  // Uninteresting: word
    String re79=".*?";  // Non-greedy match on filler
    String re80="((?:[a-z][a-z]+))";    // Word 1

    Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11+re12+re13+re14+re15+re16+re17+re18+re19+re20+re21+re22+re23+re24+re25+re26+re27+re28+re29+re30+re31+re32+re33+re34+re35+re36+re37+re38+re39+re40+re41+re42+re43+re44+re45+re46+re47+re48+re49+re50+re51+re52+re53+re54+re55+re56+re57+re58+re59+re60+re61+re62+re63+re64+re65+re66+re67+re68+re69+re70+re71+re72+re73+re74+re75+re76+re77+re78+re79+re80,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = p.matcher(txt);
    if (m.find())
    {
        String word1=m.group(1);
        System.out.print(word1.toString());
    }
  }
}

答案 2 :(得分:0)

re.findall('\"name":\".*?"', x)

我同意最好的方法是将其作为JSON文件读取。我做了,但是尝试你的正则表达式代码,并使JSON成为一个字符串文件,这就是我得到的。    

['“name”:“Gillingham”,“cod”']

我让比赛变得非贪婪'*?'确保它只是得到了城市的名称     

[ ' “名称”: “吉林厄姆”']