从 JSON 中提取位置名称
Extracting a location name from JSON
鉴于此文本
{"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":\".*"
但没有结果。
我认为正则表达式不是您的最佳选择。您正在阅读 JSON 格式的文件。因此,您最好使用 built-in 库将 JSON 读入 data-structure,然后在伪代码中读取 "name" 属性:
city = deserializeJson(JSONdataFIle.read)["name"]
一个快速的技巧是:
city = filter (in CITIES) JsonData.splitInWords
http://txt2re.com/
在这种情况下,我不会说这是最适合您的解决方案,但它确实是一个。这是一个我经常用来从具有一致模式的文本中提取文本的网站。使用该网站,我得到了下面的 Java 代码。如果这不是您现在要找的东西,您应该将该站点添加为书签,以便以后在您的软件开发库中使用。对我来说,我所做的只是将您的文本粘贴到站点中,按显示匹配项,左键单击 "word" 作为您的城市名称,然后按 Java 选项卡。然后生成代码供我复制和粘贴。
如果您复制并粘贴此代码并将其 运行 作为您选择的 IDE 中的 Java 主 class,您将看到您的城市名称结果;但是,这只有在您过滤的内容的格式一致时才有效。如果您正在处理要解析的大量数据,Java 不是您最有效的文本解析语言。像 Perl 这样的语言对此很有帮助。但是,在当今的高端计算能力下,这取决于您要寻找什么。
导入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());
}
}
}
re.findall('\"name":\".*?"', x)
我同意最好的方法是将其作为 JSON 文件阅读。我做到了,但是尝试了您的正则表达式代码,并在将 JSON 设为字符串文件之后,这就是我得到的。
['"name":"Gillingham","cod"']
我匹配了 non-greedy '*?'确保它只是获取城市的名称
['"name":"Gillingham"']
鉴于此文本
{"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":\".*"
但没有结果。
我认为正则表达式不是您的最佳选择。您正在阅读 JSON 格式的文件。因此,您最好使用 built-in 库将 JSON 读入 data-structure,然后在伪代码中读取 "name" 属性:
city = deserializeJson(JSONdataFIle.read)["name"]
一个快速的技巧是:
city = filter (in CITIES) JsonData.splitInWords
http://txt2re.com/
在这种情况下,我不会说这是最适合您的解决方案,但它确实是一个。这是一个我经常用来从具有一致模式的文本中提取文本的网站。使用该网站,我得到了下面的 Java 代码。如果这不是您现在要找的东西,您应该将该站点添加为书签,以便以后在您的软件开发库中使用。对我来说,我所做的只是将您的文本粘贴到站点中,按显示匹配项,左键单击 "word" 作为您的城市名称,然后按 Java 选项卡。然后生成代码供我复制和粘贴。 如果您复制并粘贴此代码并将其 运行 作为您选择的 IDE 中的 Java 主 class,您将看到您的城市名称结果;但是,这只有在您过滤的内容的格式一致时才有效。如果您正在处理要解析的大量数据,Java 不是您最有效的文本解析语言。像 Perl 这样的语言对此很有帮助。但是,在当今的高端计算能力下,这取决于您要寻找什么。
导入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());
}
}
}
re.findall('\"name":\".*?"', x)
我同意最好的方法是将其作为 JSON 文件阅读。我做到了,但是尝试了您的正则表达式代码,并在将 JSON 设为字符串文件之后,这就是我得到的。
['"name":"Gillingham","cod"']
我匹配了 non-greedy '*?'确保它只是获取城市的名称
['"name":"Gillingham"']