java正则表达式的怎么提取两个字符之间的值

String a = “iajfs kajsdfhkasj jhiuhew held at ,Guangzhou, Guangdong,China hkjsdhfakh askdfjas”;

java 中想要取得Guangzhou,Guangdong应该用什么方法?
sorry, 我没说清楚,Guangzhou,Guangdong这两个单词可能是任意的字符串但格式是这样的“held at Guangzhou,Guangdong,”

实现方法:
?

1
2
3
4
5
6
7
8
9
10
11
12
13

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = "A876X";
// 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来
// 在这里,我们要提取最后一个数字,正则规则就是“一个数字加上大于等于0个非数字再加上结束符”
Pattern pattern = Pattern.compile("(\\d)[^\\d]*$");
Matcher matcher = pattern.matcher(s);
if(matcher.find())
System.out.println(matcher.group(1));
}
}

关于Matcher 中的几个方法说明:
Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串
Java代码示例:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Pattern p=Pattern.compile(“\d+”);
Matcher m=p.matcher(“aaa2223bb”);
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223后的索引号
m.group();//返回2223
Mathcer m2=p.matcher(“2223bb”);
m2.lookingAt(); //匹配2223
m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
m2.end(); //返回4
m2.group(); //返回2223
Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出错,因为不匹配返回false
m3.matches(); //匹配整个字符串
m3.start(); //返回0
m3.end(); //返回3,原因相信大家也清楚了,因为matches()需要匹配所有字符串
m3.group(); //返回2223

说了这么多,相信大家都明白了以上几个方法的使用,该说说正则表达式的分组在java中是怎么使用的.
start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
Java代码示例:
?

1
2
3
4
5
6
7
8
9
10

Pattern p=Pattern.compile(“([a-z]+)(\d+)”);
Matcher m=p.matcher(“aaa2223bb”);
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串

现在我们使用一下稍微高级点的正则匹配操作,例如有一段文本,里面有很多数字,而且这些数字是分开的,我们现在要将文本中所有数字都取出来,利用java的正则操作是那么的简单.
Java代码示例:
?

1
2
3
4
5

Pattern p=Pattern.compile(“\d+”);
Matcher m=p.matcher(“我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com”);
while(m.find()) {
System.out.println(m.group());
}

输出:
456456
0532214
123
如将以上while()循环替换成
?

1
2
3
4
5

while(m.find()) {
System.out.println(m.group());
System.out.print(“start:”+m.start());
System.out.println(” end:”+m.end());
}

则输出:
456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39
现在大家应该知道,每次执行匹配操作后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串的信息,以及它们的重载方法,也会改变成相应的信息.

注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-31
如果你需要在字符串中不包含其他标签,
可以做这样的事情。

用[^ >]否认

如果您还需要包括其他标签,可以有一个

模式模式= Pattern.compile(“( ?)([^ <] +)( )“);

匹配器匹配=模式

。匹配(“ER 你说什么也学测试 TABLE> ”); BR p>同时(matcher.find()){

System.out.println(matcher.group(2));
}
第2个回答  2014-03-31
String类型的用截取方法不就可以了。
用,indexOf();这个方法截取 想要哪段截哪段。
你可以百度java 字符串截取 有很很多例子 要是还不明白可以继续追问
第3个回答  2014-03-31
String a = "iajfs kajsdfhkasj jhiuhew held at ,2ad, Guangdong,China hkjsdhfakh askdfjas";
String reg = ".*,\\s*([\\w\\s]+\\s*,\\s*[\\w\\s]+)\\s*,.*";
System.out.println (a.replaceAll (reg, "$1"));

追问

如果Guangzhou, Guangdong,可以是任意字符串,应该怎么写呢?

追答String a = "iajfs kajsdfhkasj jhiuhew held at , sf  2ad, Guangdong,China hkjsdhfakh askdfjas";
String reg = ".*,\\s*(.+\\s*,\\s*.+)\\s*,.*";
System.out.println (a.replaceAll (reg, "$1"));

追问

嗯,非常感谢,但是可以解释一下是是什么意思吗

追答

不是在逗号直接的么,然后里面还有个逗号么,然后就是这样的格式啊,看你的例子就是这样的啊,我只能把握这个规律了

本回答被提问者采纳
第4个回答  2017-04-17
例如:
public void test4(){
String text="5*p#15#p+i-5*(p#6#p-3)";
Pattern p = Pattern.compile("p\\#(.*?)\\#p");
//其中\是将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”匹配“(”。
//其中?的作用是零次或一次匹配前面的字符或子表达式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。
//其中*的作用是零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。

//正则表达式,取q#和#q之间的字符串,不包括p#和#p
Matcher m = p.matcher(text);
while(m.find()) {
System.out.println(m.group(1));
//m.group(1)不包括这两个字符
}

}

java正则表达式的怎么提取两个字符之间的值
import java.util.regex.Pattern;public class Test { public static void main(String[] args) { String s = "A876X";\/\/ 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来 \/\/ 在这里,我们要提取最后一个数字,正则规则就是“一个数字加上大于等于0个非数字再加上结束符”Patte...

正则表达式提取两个字符之间的字符串
PS.你会在java里用正则获取第一个分组吧?下面是一个例子(部分),subjectString是“我 实在 不知道 该 怎么办\/end\/ 了”所在的字符串。List<String> matchList = new ArrayList<String>();try {Pattern regex = Pattern.compile(" ([^ ]+?)\/end\/");Matcher regexMatcher = regex.matcher(s...

java 如何获取两个字符串之间的汉字
import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test3 {public static void main(String[] args) {String str = "321AAawdawdawd萨芬AAkjjkjBB";String regex = "AA(.*)BB";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(str);while...

java 正则表达式 提取两个字符串中的字符串
while (matcher.find()) { System.out.println(matcher.group(2));}

java里面如何截取两个关键字中间的字符串?
1.split()+正则表达式来进行截取。将正则传入split()。返回的是一个字符串数组类型。不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时。String str = "abc,12,3yy98,0";String[] strs=str.split(",");for(int i=0,len=strs.length;i<len;i++){ System.out.println(strs[...

java中怎么截取字符串中两个单词中间的字符?
使用正则表达式bread.*?bread去验证,验证成功则将字符串进行replace('bread',''),剩下的字符串就是你要的字符串了,如果正则表达式验证失败则返回none

Java中如何用正则表达式来提取string中两个\/里面之间的内容?
String s = "aaa\/b\/cc\/dd\/ff\/e\/";Pattern pattern2 = Pattern.compile("\/(.*?)\/");Matcher matcher2 = pattern2.matcher(s);while(matcher2.find()){ System.out.println(matcher2.group(1));}

怎么用Java把输入的两串字符串中的数字提取出来,并且将两串数字相乘输出...
解决方案:使用正则表达式抽取数字子串;使用Interger.parse将数字子串转为整数类型;计算两个数字相乘即可;

用java获取两个关键字之间的内容
首先处理这类问题的思路是找对应的Api,这是字符串处理,在java.lang包下,String类 splitpublic String[] split(String regex)根据给定的正则表达式的匹配来拆分此字符串。该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,结果数组中不包括结尾空字符串。例如,字符串 "...

java怎样获取文本中两个String之间的String
先获得第一个string1和第二个string2的index 设为index1 和index2 然后length=index2-(index1+string1.length)就是两个之间字符串的长度,然后对文本中的内容用substring(index1+string1.length, length)就行了

相似回答