鉴于此文
{"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":\".*"
而没有结果。
答案 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”']
我让比赛变得非贪婪'*?'确保它只是得到了城市的名称
[ ' “名称”: “吉林厄姆”']