Java 正则表达式
我有一根这样的绳子 STAR=20110209 00:01:01 | PNAM=test|.xml | PNUM=480 | SSTA=20110209 00:01:01 | STRT=20110209 00:01:01 |停止=20110209 00:01:01| 我想在这里提取几个键的值 比如PNAM和SSTA的价值是什么Java 正则表达式,java,regex,Java,Regex,我有一根这样的绳子 STAR=20110209 00:01:01 | PNAM=test|.xml | PNUM=480 | SSTA=20110209 00:01:01 | STRT=20110209 00:01:01 |停止=20110209 00:01:01| 我想在这里提取几个键的值 比如PNAM和SSTA的价值是什么 我想要一个正则表达式,可以提供几个键的值,键可以是任意顺序 您喜欢这项工作吗 String str = "STAR=20110209 00:01:01|PNAM=test
我想要一个正则表达式,可以提供几个键的值,键可以是任意顺序 您喜欢这项工作吗
String str = "STAR=20110209 00:01:01|PNAM=test_.xml|PNUM=480|SSTA=20110209 00:01:01|STRT=20110209 00:01:01|STOP=20110209 00:01:01";
String[] parts = str.split("\\|");
for (String part : parts)
{
String[] nameValue = part.split("=");
if (nameValue[0] == "somekey")
{
// ..
}
}
你喜欢这个工作吗
String str = "STAR=20110209 00:01:01|PNAM=test_.xml|PNUM=480|SSTA=20110209 00:01:01|STRT=20110209 00:01:01|STOP=20110209 00:01:01";
String[] parts = str.split("\\|");
for (String part : parts)
{
String[] nameValue = part.split("=");
if (nameValue[0] == "somekey")
{
// ..
}
}
因此,正则表达式并不是解决问题的最佳方法。相反,像其他人提供的那样使用split(),但不要使用疯狂的if循环,而是将所有内容加载到映射中
String str = "STAR=20110209 00:01:01|PNAM=test_.xml|PNUM=480|SSTA=20110209 00:01:01|STRT=20110209 00:01:01|STOP=20110209 00:01:01";
String[] parts = str.split("|");
Map<String, String> properties = new HashMap<String, String>();
for (String part : parts) {
String[] nameValue = part.split("=");
properties.put(nameValue[0], nameValue[1]);
}
String str=“STAR=20110209 00:01:01 | PNAM=test.xml | PNUM=480 | SSTA=20110209 00:01:01 | STRT=20110209 00:01:01 | STOP=20110209 00:01:01”;
String[]parts=str.split(“|”);
映射属性=新的HashMap();
用于(字符串部分:部分){
字符串[]名称值=部分分割(“”);
properties.put(nameValue[0],nameValue[1]);
}
然后你所要做的就是,
properties.get(“PNUM”)
因此,正则表达式并不是解决问题的最佳方法。相反,像其他人提供的那样使用split(),但不要使用疯狂的if循环,而是将所有内容加载到映射中
String str = "STAR=20110209 00:01:01|PNAM=test_.xml|PNUM=480|SSTA=20110209 00:01:01|STRT=20110209 00:01:01|STOP=20110209 00:01:01";
String[] parts = str.split("|");
Map<String, String> properties = new HashMap<String, String>();
for (String part : parts) {
String[] nameValue = part.split("=");
properties.put(nameValue[0], nameValue[1]);
}
String str=“STAR=20110209 00:01:01 | PNAM=test.xml | PNUM=480 | SSTA=20110209 00:01:01 | STRT=20110209 00:01:01 | STOP=20110209 00:01:01”;
String[]parts=str.split(“|”);
映射属性=新的HashMap();
用于(字符串部分:部分){
字符串[]名称值=部分分割(“”);
properties.put(nameValue[0],nameValue[1]);
}
那么您所要做的就是,properties.get(“PNUM”)
使用以下Java代码:
String str = "STAR=20110209 00:01:01|PNAM=test_.xml|PNUM=480|SSTA=20110209 00:01:01|STRT=20110209 00:01:01|STOP=20110209 00:01:01|";
Pattern p = Pattern.compile("([^=]*)=([^|]*)\\|");
Matcher m = p.matcher(str);
String pnamVal = null, sstaVal = null;
while (m.find()) {
//System.out.println("Matched: " + m.group(1) + '=' + m.group(2));
if (m.group(1).equals("PNAM"))
pnamVal = m.group(2);
else if (m.group(1).equals("SSTA"))
sstaVal = m.group(2);
if (pnamVal != null && sstaVal != null)
break;
}
System.out.println("SSTA: " + sstaVal);
System.out.println("PNAM: " + pnamVal);
输出
使用以下Java代码:
String str = "STAR=20110209 00:01:01|PNAM=test_.xml|PNUM=480|SSTA=20110209 00:01:01|STRT=20110209 00:01:01|STOP=20110209 00:01:01|";
Pattern p = Pattern.compile("([^=]*)=([^|]*)\\|");
Matcher m = p.matcher(str);
String pnamVal = null, sstaVal = null;
while (m.find()) {
//System.out.println("Matched: " + m.group(1) + '=' + m.group(2));
if (m.group(1).equals("PNAM"))
pnamVal = m.group(2);
else if (m.group(1).equals("SSTA"))
sstaVal = m.group(2);
if (pnamVal != null && sstaVal != null)
break;
}
System.out.println("SSTA: " + sstaVal);
System.out.println("PNAM: " + pnamVal);
输出
每个键只能出现一次吗?值是否可以包含分隔符“|”您是否可以在上拆分字符串,然后在上拆分部分?值没有分隔符“|”,并且一个键只显示一次。每个键只能显示一次?值是否可以包含分隔符“|”您是否可以在上拆分
上的字符串,然后拆分=
上的部分?值没有分隔符“|”,并且键只显示一次。应为str.split(\\\\124;”);或者你会得到有趣的结果。我不想两次使用split,因为它们可以是100个键、值对,这样做似乎太过致命了。100个对看起来像是小变化,真的。应该是str.split(\\\\\;);或者你会得到有趣的结果。我不想使用拆分两次,因为它们可以是100个键、值对,这样做似乎太过致命。100个键对看起来很小,真的。和其他基于拆分的答案一样<代码>|需要转义,否则它将在原始字符串中的每个字符上拆分(包括文本的开头和结尾)。与其他基于拆分的答案相同<代码>需要转义,否则它将在原始字符串中的每个字符上拆分(包括文本的开头和结尾)。我将以这种方式使用ur表达式([PNAM | SSTA | STAR]*)=([^ |]*)\\\\\确定您可以使正则表达式更具限制性。稍微更正一下,在这种情况下,您的正则表达式应该是“(PNAM | SSTA | STAR)=([^ SSTA]*)\\\\\”
我将以这种方式使用ur表达式([PNAM | SSTA | STAR]*)=([^ SSTA]*)\\\\\;当然您可以让正则表达式更严格一些。稍加更正,在这种情况下,您的正则表达式应该是“(PNAM | SSTA | STAR)=([^ SSTA]*)\\\\\\”