-
2020-04-23 15:19:57
通过模块
re
匹配字符串,如下,判断字符串str2
是否在str1
中import re str1 = "aabcd" str2 = "abc" match = re.compile(str2).search(str1).group() print(match)
这样写,是为了代码的简洁,但是容易引起报错:
AttributeError: 'NoneType' object has no attribute 'group'
,分析原因发现当匹配不到元素,之后又调用了group()方法造成的。因此,代码进一步优化:import re str1 = "aabd" str2 = "abc" match = re.compile(str2).search(str1) if match: print(match.group()) elif match == None: print("无法匹配")
更多相关内容 -
Java使用正则表达式判断字符串是否以字符开始
2020-08-30 04:26:15主要介绍了Java使用正则表达式判断字符串是否以字符开始的相关资料,需要的朋友可以参考下 -
JS正则表达式获取字符串中特定字符的方法
2020-10-26 02:19:55主要介绍了JS正则表达式获取字符串中得特定字符,通过replace的回调函数获取,需要的朋友可以参考下 -
Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解
2020-12-16 00:51:39position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大小写进行检索;’c’区分大小写进行检索。默认为’c’) SELECT REGEXP_... -
正则表达式匹配不包含某些字符串的技巧
2021-01-19 21:14:39经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的... -
C#正则表达式匹配与替换字符串功能示例
2020-08-30 09:25:48主要介绍了C#正则表达式匹配与替换字符串功能,结合具体实例形式分析了C#字符串正则替换相关类、方法的使用技巧与相关注意事项,需要的朋友可以参考下 -
JS正则表达式提取字符串中所有汉字的脚本
2020-10-30 16:47:38JS正则表达式提取字符串中所有汉字的脚本 -
正则表达式匹配各种特殊字符
2020-12-13 15:10:58写个可以匹配一下各种特殊字符的正则表达式 ((?=[\x21-\x7e]+)[^A-Za-z0-9]) x21-\x7e]+)[^A-Za-z0-9]) 这个匹配所有键盘上可见的非字母和数字的符号 var patrn = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~... -
Python 正则表达式匹配数字及字符串中的纯数字
2020-10-16 14:32:05主要介绍了Python 正则表达式匹配数字及使用正则表达式找出字符串中的纯数字,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 -
python正则表达式匹配字符串相关方法
2021-06-05 15:56:54python正则表达式匹配字符串相关方法一、python正则表达式相关函数简要介绍re.compile函数re.match函数re.search函数findall函数re.finditer函数其他函数二、python正则表达式匹配方法简要介绍 一、python正则表达式...python正则表达式匹配字符串相关方法
一、匹配方法简要介绍及注意事项
1.贪婪匹配与非贪婪匹配
在定义用于匹配的模式串时,我们知道“.*”和“.*?”分别代表“匹配任意字符0次或多次”和“匹配任意字符0次或1次”。如果使用“.*”,则为贪婪匹配;如果使用“.*?”,则为非贪婪匹配。
# 以abcdbcd为例 str_demo = 'abcdbcd' result = re.search('b.*d', str_demo).group() print(result) ## 输出bcdbcd result = re.search('b.*?d', str_demo).group() print(result) ## 输出bcd
2.findall与search的选取问题
如果认为自己定义的模式串只能匹配到一个结果,则使用search方法结合group方法可以直接得到这个字符串;如果认为自己定义的模式串能匹配到多个结果,则使用findall方法可以得到存储多个结果字符串的列表。
# 以abcdbcd为例 str_demo = 'abcdbcd' result = re.search('b.*d', str_demo).group() print(result) ## 输出bcdbcd result = re.findall('b.*?d', str_demo) print(result) ## 输出['bcd', 'bcd']
3.匹配时"()"和“[]”的用法
目标字符串:‘abcde’
1.[…] 会匹配在[]内的任意一个字符,而不会匹配整个字符串。str_demo = 'eabceaebece' result = re.findall('[abc]', str_demo) print(result) ## 结果为['a', 'b', 'c', 'a', 'b', 'c'] result = re.findall('[abc][e]', str_demo) print(result) ## 结果为['ce', 'ae', 'be', 'ce'] result = re.findall('[abc].*?[e]', str_demo) print(result) ## 结果为['abce', 'ae', 'be', 'ce'] result = re.findall('[abc].*[e]', str_demo) print(result) ## 结果为['abceaebece']
2.(…)会匹配在()内的整个字符串。使用search方法时则正常匹配(相当于没有()),使用findall方法时则只会匹配(…)的内容。
str_demo = 'eabcdeeaebece' result = re.search('(abc).*?(e)', str_demo).group() print(result) ## 结果为abcde result = re.search('(abc).*(e)', str_demo).group() print(result) ## 结果为abcdeeaebece result = re.findall('(bc).*(e)', str_demo) print(result) ## 结果为[('bc', 'e')]
3.()[]同时出现,考虑(…)式的字符串与[…]式内的字符和顺序,使用findall 方法时结果会舍弃[…]内容,使用search方法时则正常匹配(相当于没有()和[])。
str_demo = 'eabcdeeaebece' result = re.findall('(e)[abc]', str_demo) print(result) ## 结果为['e', 'e', 'e', 'e'] result = re.findall('(abc)[e]', str_demo) print(result) ## 结果为[] result = re.findall('(abc).*[e]', str_demo) print(result) ## 结果为['abc'] result = re.findall('[abc].*(e)', str_demo) print(result) ## 结果为['e'] result = re.search('[bc].*(e)', str_demo).group() print(result) ## 结果为## 结果为bcdeeaebece result = re.search('[bc].*?(e)', str_demo).group() print(result) ## 结果为## 结果为bcde
4.使用正则表达式匹配字符串的例子
下列例子均使用非贪婪匹配方法。
(1)匹配以a开头,以b为结尾的字符串(不包含开头和结尾):
str_demo = 'acdbcd' pattern = re.compile('(?<=a).*?(?=b)') result = pattern.search(str_demo).group() print(result) ## 输出cd
(2)匹配以a开头,以b结尾的字符串(包含开头和结尾):
str_demo = 'acdbcd' pattern = re.compile('a.*?b') result = pattern.search(str_demo).group() print(result) ## 输出acdb
(3)匹配前面不为a、后面不为b的字串:
str_demo = 'a1***3***3b' pattern = re.compile('(?!<a)1.*3(?!b)') result = pattern.search(str_demo).group() print(result) ## 输出1***3
二、相关函数简要介绍
re.compile函数
re.compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 、 search() 和 findall() 这三个函数使用。
re.compile(pattern[, flags])
参数 描述 pattern 匹配的正则表达式。 flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 re.match函数
re.match 尝试从目标字符串的起始位置匹配,如果起始位置匹配不成功,则match()就返回none。
re.match(pattern, string, flags=0)
参数 描述 pattern 匹配的正则表达式。 string 要匹配的字符串。 flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 re.search函数
re.search 扫描整个字符串并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
参数 描述 pattern 匹配的正则表达式。 string 要匹配的字符串。 flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 findall函数
findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
findall(string[, pos[, endpos]]) pattern.findall(string[, pos[, endpos]]) # pattern及定义好的正则匹配式,如re.compile re.findall(pattern,string[, pos[, endpos]])
参数 描述 string 要匹配的字符串。 pos 可选参数,指定字符串的起始位置,默认为 0。 endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。 re.finditer函数
re.finditer 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)
参数 描述 pattern 匹配的正则表达式。 string 要匹配的字符串。 flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 re.sub函数
re.sub 用于替换字符串中的匹配项。
re.sub(pattern, repl, string, count=0, flags=0)
参数 描述 pattern 匹配的正则表达式 repl 替换用的字符串,也可为一个函数。 string 要匹配的字符串。 count 可选参数,匹配后替换的最大次数,默认 0 表示替换所有的匹配。 flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 其他函数
菜鸟教程链接: python正则表达式
正则表达式特殊符号用法链接:特殊符号
其他教程:详情 -
正则表达式通用匹配字符串(链接地址、IP等)
2020-09-29 16:56:03正则表达式,比较全的匹配文本中的链接地址、IP等,示例使用JS写的,其他各种开发语言可通用,示例过滤了很多特殊字符 -
python正则表达式匹配不包含某几个字符的字符串方法
2020-10-16 15:52:14今天小编就为大家分享一篇python正则表达式匹配不包含某几个字符的字符串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
C#匹配中文字符串的4种正则表达式分享
2021-01-01 08:25:091、匹配字符串全部是中文字符的正则表达式 代码如下:”^[\u4e00-\u9fa5]+$” 说明:“^”表示字符串开头,“$”表示字符串结束,“[\u4e00-\u9fa5]+”表示一个或多个中文字符。 2、匹配字符串中包含中文字符的正则... -
比较常用的几个正则表达式匹配数字(收藏)
2020-12-13 05:00:46正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配... -
java正则表达式匹配字符串
2020-03-21 17:50:30今天练习java比赛题时,忘记了java的正则表达式怎么用,特地查了一下。觉得用好正则表达式真的是能有意想不到的效果。 Talk is cheap,show you their code //解释内容见注释 import java.util.regex.Matcher; ...今天练习java比赛题时,忘记了java的正则表达式怎么用,特地查了一下。觉得用好正则表达式真的是能有意想不到的效果。
Talk is cheap,show you their code
//解释内容见注释
import java.util.regex.Matcher; import java.util.regex.Pattern; public class java正则表达式 { public static void main(String[] args) { //1.字符串与正则表达式直接匹配 //字符串 String s1="hello",s2="world",s3="alanqiao"; //正则表达式 String pattern="[^(a|e|o|u)]+[a|e|o|u]+[^(a|e|o|u)]+[a|e|o|u]+"; System.out.println("字符串"+s3+"与模式"+pattern+"是否匹配?"+Pattern.matches(pattern, s3)); System.out.println("----------------"); //2.正则表达式的捕获组 //正则表达式加上了括号,一个括号一组 String patt="([^(a|e|o|u)]+)([a|e|o|u]+)([^(a|e|o|u)]+)([a|e|o|u]+)"; Pattern p=Pattern.compile(patt); Matcher m=p.matcher(s3); //打印捕获组的数量 System.out.println("count="+m.groupCount()); if (m.find( )) { //注:下标为0的捕获组是完整的匹配字符串 for(int i=0;i<=m.groupCount();i++) { //打印捕获组在字符串中的下标 System.out.println("start="+m.start(i)); //打印捕获组 System.out.println("匹配串:"+m.group(i)); System.out.println(); } } else { System.out.println("NO MATCH"); } } }
-
js正则表达式校验指定字符串的方法
2020-10-18 08:18:25今天小编就为大家分享一篇js正则表达式校验指定字符串的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
js正则表达式 匹配两个特定字符间的内容示例
2020-10-18 08:12:58今天小编就为大家分享一篇js正则表达式 匹配两个特定字符间的内容示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
PostgreSQL 正则表达式匹配字符串
2020-04-20 15:50:31select regexp_matches('$Field3efd4__u$ + $Field_j7zd__u$', '\$(\w+)\$','g') select substring(regexp_matches('$Field3efd4__u$ + $Field_j7zd__u$', '\$(\w+)\$','g')::text, '{(\w+)}');select regexp_matches('$Field3efd4__u$ + $Field_j7zd__u$', '\$(\w+)\$','g')
select substring(regexp_matches('$Field3efd4__u$ + $Field_j7zd__u$', '\$(\w+)\$','g')::text, '{(\w+)}');
-
Java正则表达式匹配字符串并提取中间的值
2019-07-02 15:42:20有时候正则表达式不只是匹配一下什么数字/邮箱/身份证/日期等等,还需要匹配某一段文字,并按照既定格式提取其中的某些值. 场景一:提取SAML2报文 SAML2报文内容如下,从中提取对应的attribute name和value. <saml:... -
python正则表达式匹配字符串
2019-03-05 22:47:49import re 导入正则表达式模块 用 re.compile() 函数创建一个 Regex 对象.(记着使用原始字符串, 字符串前面带r) 将你要用于搜索的字符串传入 Regex 对象的 search() 方法中。这个方法将会返回一个 Match object. ... -
【SQL查询】正则表达式匹配字符串
2019-09-27 23:56:01匹配输入字符串的开始位置。 $ 匹配输入字符串的结尾位置。 * 匹配前面的字符零次或多次。 + 匹配前面的字符一次或多次。 ? 匹配前面的字符零次或一次。 . 匹配任何字符,除了空. ... -
Java通过正则表达式匹配字符串中任意中文
2021-09-18 13:26:48汉字正则:[\\u4E00-\\u9FFF]+ 方法类: public static String regxChinese(String ... // 匹配的字符串的正则表达式 String regCharset = "[\\u4E00-\\u9FFF]+"; Pattern p = Pattern.compile(regCharset); M -
java使用正则表达式查找包含的字符串示例
2020-08-30 22:34:55主要介绍了java使用正则表达式查找包含的字符串功能,结合具体实例形式分析了java针对字符串匹配查找的相关实现技巧,需要的朋友可以参考下 -
【正则表达式】字符串模式匹配,提高开发效率
2022-03-16 15:30:44前言 今天我们来学习正则表达式...正则表达式是检查、匹配字符串的表达式 正则表达式用来描述某种规则,同时它不是某种语言专有的技术,它对主流的语言都有良好的支持。 正则表达式的主要使用场景是:字符串检验,查找 -
Python正则表达式匹配字符串中的任意纯数字
2021-03-05 15:59:141.使用“\d+”匹配全数字代码:import rezen = "Arizona 479, 501, 870. Carlifornia 209, 213, 650."m = re.findall("\d+", zen)print(m)结果:['479', '501', '870', '209', '213', '650']但是上述这种方式也会... -
正则表达式匹配字符串中的任何空格
2019-08-14 12:54:54/^[a-zA-Z0-9_\\\/]*$/ 匹配空格包括" ", \r, \t, \n, \f +的含义是后面出现一个或多个 / [ \ s ] + / -
JavaScript 技术篇-js正则表达式匹配字符串左右两边是否包含空格
2019-07-03 21:13:54JavaScript 技术篇-js正则表达式匹配字符串左右两边是否包含空格。 /(^\s)|(\s$)/ 这个是匹配左右两边的空格。 /(^\s)/ 是匹配左侧的空格。 同理 /(\s$)/ 是匹配右边的空格。 所有空格是 /(\s)/。 -
python使用正则表达式匹配字符串开头并打印示例
2021-01-29 14:16:30python 正则表达式,怎样匹配以某个字符串开头,以str ="abcdefg123213qwe" 比如要匹配以abc开头,以qwe结尾,要怎样写...测试正则表达式是否匹配字符串的全部或部分 regex=ur"" #正则表达式if re.search(regex, sub... -
C语言中的正则表达式使用示例详解
2020-08-25 19:47:12正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。本文通过示例代码给大家介绍了C语言中的正则表达式使用,感兴趣的朋友跟随小编一起看看吧 -
python字符串中匹配数字的正则表达式
2020-10-16 17:56:10正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。这篇文章主要介绍了python字符串中匹配数字的正则表达式 ,需要的朋友可以参考下