本文收集整理关于正则表达式匹配字符串的相关议题,使用内容导航快速到达。
内容导航:
Q1:正则表达式如何匹配特定字符串中的特定字符或文本?
_* 必须是连续的 _ 才能被匹配出来,所以捕获组内需要能匹配非 _ 的其它字符,如果是多行的话还需要这么写:(?<=TESTSTR)(_[^_\n]*)+(?=;)
Q2:JS如何用正则表达式 获取字符串内的匹配部份?
实现的效果:在字符串中abcdefgname=testsddfhskshjsfsjdfps中获取name的值test
实现的机制:通过replace的回调函数获取。
可以通过下面的代码获取匹配部分
var str = "abcdefgname=testsddfhskshjsfsjdfps";
var reg = /name=((\w|-|\s)+)/ig;
str.replace(reg, function() {
console.log(arguments.length); //5、console.log(arguments[1]);//test
});
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
Q3:python 使用正则表达式 匹配“非长字符串”
在我们日常使用中,经常需要搜索关键位置进行字符串的匹配,比如一行文本的开头,又比如一个字符串的开头,或者结尾。 这时候就需要使用正则表达式的边界符进行匹配,它们定义如下:
定义字符 意义
^ 字符串的开头或一行的开头
$ 字符串的结尾或一行的结尾
\A 字符串的开头
\Z 字符串的结尾
\b 空字符串的开头或一个单词的结尾
\B 非空字符串的开头或非一个单词的结尾,与\b相反
测试例子如下:
#python 3.6#http://blog.csdn.net/caimouse/article/details/51749579#from re_test_patterns import test_patternstest_patterns(This is some text -- with punctuation.,[(r^\w+, word at start of string),(r\A\w+, word at start of string),(r\w+\S*$, word near end of string),(r\w+\S*\Z, word near end of string),(r\w*t\w*, word containing t),(r\bt\w+, t at start of word),(r\w+t\b, t at end of word),(r\Bt\B, t, not start or end of word)],)
Q4:正则表达式如何匹配除某些字符串以外的所有字符
你对正则表达式的理解可能存在误区,用[ ]括起来的是匹配任意字符,根据你的要求,应该是想要匹配所有以abc开始,以.zip结束的字符,写法应该是这样(abc).+(\.zip)。
在方括号[ ]中,除了^,-,一切特殊符号全部失效,你的[^abc.*?.zip]这个正则表达式,实际意思是,匹配除了a,b,c,.,*,?,z,i,p之外的一切字符
Q5:正则表达式 匹配字符串
正则表达式:^(.?|[^/]{2}.*)(["“].*?["”])
这里双引号支持英文和中文的双引号
匹配这一行第一个双引号开始到第二个双引号结束的内容
若这一行以//开通则不匹配
匹配成功后取第2组的值即为所要结果
java 代码示例:
publicclassTest{Q6:java正则表达式如何匹配某个字符串之前的字符串
java正则提取需要用到Matcher类,下面给出案例示例供参考
需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6、
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()返回匹配到的子字符串
示例代码如下,具体功能请参考注释
Pattern p=Pattern.compile(“\d+”); Matcher m=p.matcher(“aaa2223bb”); m.find();//匹配2223 m.start();//返回3 m.end();//返回7,返回的是2223后的索引号 m.group();//返回2223Mathcer m2=p.matcher(“2223bb”); m2.lookingAt(); //匹配2223 m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0 m2.end(); //返回4 m2.group(); //返回2223Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出错,因为不匹配返回false m3.matches(); //匹配整个字符串 m3.start(); //返回0 m3.end(); //返回3,原因相信大家也清楚了,因为matches()需要匹配所有字符串 m3.group(); //返回2223、
另外,Mathcer类中start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
示例如下:
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,返回第二组匹配到的子字符串
注意: 只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用。
Q7:scala正则表达式匹配某个字符串并在前面加空格吗
Stringa="abc123efgc1234";
Patternpattern=Pattern.compile("c123");
Matchermatcher=pattern.matcher(a);
//字符串是否与正则表达式相匹配
while(matcher.find()){
a=a.replace(matcher.group(),""+matcher.group());
}
System.out.println(a);