41 正则中匹配多个字符串匹配任意单个字符正则中使用字符串重复、可选和特殊字符

第三课 正则中匹配多个字符串

# 匹配多个字符串

# 择一匹配符号, |
import re
s = ‘Python|Ruby|Java|Swift‘
m = re.match(s,‘PythonRuby‘)
print(m) # <re.Match object; span=(0, 6), match=‘Python‘>

m = re.search(s, ‘I love Python.‘)
print(m) # <re.Match object; span=(7, 13), match=‘Python‘>
m = re.search(s, ‘I love Java.‘)
print(m) # <re.Match object; span=(7, 11), match=‘Java‘>

----------------------------
第四课 正则中匹配任意单个字符

# 匹配任意单个字符
# 点(.):可以匹配任意单个字符
‘‘‘
match(‘.ind‘,‘-ind‘)
‘\.ind‘ ‘bind‘
‘‘‘
import re

s = ‘bin.‘
m = re.match(s, ‘binxa‘)
if m is not None:
print(m.group()) # binx

m = re.search(s, ‘<bind>‘)
print(m.group()) # bind

s1 = ‘3.14‘
s2 = ‘3\.14‘ # 这个只能匹配 3.14
m = re.match(s1, ‘3.14‘)
print(m) # <re.Match object; span=(0, 4), match=‘3.14‘>
m = re.match(s1, ‘3314‘)
print(m) # <re.Match object; span=(0, 4), match=‘3314‘>

m = re.match(s2, ‘3.14‘)
print(m) # <re.Match object; span=(0, 4), match=‘3.14‘>

m = re.match(s2, ‘3514‘)
print(m) # None

第五课  正则中使用字符串
主要针对单个字符有多个选择

#  [abcd]   表示   或者是a  或者是b 或者是c 或者是d

# 使用字符集
# [abcd]  abc|b|c|d
import re
m = re.match(‘[abcd]‘,‘a‘)
print(m)                # <re.Match object; span=(0, 1), match=‘a‘>

print(re.match(‘a|b|c|d‘,‘a‘))  # <re.Match object; span=(0, 1), match=‘a‘>

print(re.match(‘[abcd]‘,‘ab‘))  # <re.Match object; span=(0, 1), match=‘a‘>
print(re.match(‘ab|cd‘,‘ab‘))  # <re.Match object; span=(0, 2), match=‘ab‘>

print(re.match(‘[ab][cd][ef][gh]‘,‘adfh‘)) # <re.Match object; span=(0, 4), match=‘adfh‘>

print(re.match(‘[ab][cd][ef][gh]‘,‘abceh‘))  # None

-------------------------
第六课  正则中重复、可选和特殊字符

# 重复、可选和特殊字符

‘‘‘
*:0到n  a* 空字符串 a aa  aaa     表示*修复的字符串 0到n次
+:1到n  a+  a  aa   aaa         表示+修复的字符串 1到n次 至少有一个
?:可选  a?  空字符串  a           表示修复的字符串可有可无
‘‘‘
‘‘‘
匹配‘a‘ ‘b‘ ‘c‘三个字母按顺序从左到右排列,而且这3个字母都必须至少有1个
abc  aabc   abbbccc   bca(不匹配)
‘‘‘
import re
s = ‘a+b+c+‘     # 同时满足 三个字母按顺序并且至少有1个
strList = [‘abc‘,‘aabc‘,‘bbabc‘,‘aabbbcccxyz‘]
for value in strList:
    m = re.match(s,value)
    if m is not None:
        print(m.group())
    else:
        print(‘{}不匹配{}‘.format(value,s))
结果为:
abc
aabc
bbabc不匹配a+b+c+
aabbbccc

# 匹配前面任意3个数字-后面任意3个小写字母
‘‘‘
123-abc   543-xyz   1-xyz(不匹配)  xyz-123(不匹配)
[0-9]  表示任意一个数字
\d    表示任意一个数字
\d\d\d     任意3个数字
[a-z]   任意一个小写字母
[a-z][a-z][a-z]   任意3个字母
[A-Z]        任意一个大写字母
{n}
\d{3}       表示任意出现3此数字
[a-z]{3}    表示一个出现3此字母
‘‘‘
print(‘-------------‘)
s = ‘\d{3}-[a-z]{3}‘
strList = [‘123-abc‘,‘456-xyz‘,‘1234-xyz‘,‘1-xyzabc‘,‘657-xyz^%abc‘]
for value in strList:
    m = re.match(s,value)
    if m is not None:
        print(m.group())
    else:
        print(‘{}不匹配{}‘.format(value,s)) 

结果为:
123-abc
456-xyz
1234-xyz不匹配\d{3}-[a-z]{3}
1-xyzabc不匹配\d{3}-[a-z]{3}
657-xyz

‘‘‘
匹配以a到z的26个字母中的任意一个作为前缀(也可以没有这个前缀),后面至少有1个数字

‘‘‘
print(‘-------‘)
s = ‘[a-z]?\d+‘
strList = [‘1234‘,‘a123‘,‘ab456‘,‘b234abc‘]
for value in strList:
    m = re.match(s,value)
    if m is not None:
        print(m.group())
    else:
        print(‘{}不匹配{}‘.format(value,s)) 

结果为:
1234
a123
ab456不匹配[a-z]?\d+
b234

‘‘‘
匹配email
\w   表示任意一个字符,包括小写的大写的字母和数字 也能匹配汉子 不包括连字符和特殊的字符
\w+   表示任意一个字符,包括小写的大写的字母和数字  至少有一个 不能为空
[a-zA-Z0-9] 表示:只能是字母小写大写和数字
‘‘‘
print(‘-------‘)
email = ‘\[email protected](\w+\.)*\w+\.com‘
emailList = [‘[email protected]‘,‘[email protected]‘,‘[email protected]‘,‘[email protected]‘]
for value in emailList:
    m = re.match(email,value)
    if m is not None:
        print(m.group())
    else:
        print(‘{}不匹配{}‘.format(value,email))

结果为:
[email protected]
[email protected]
[email protected]不匹配\[email protected](\w+\.)*\w+\.com
[email protected]

strValue = ‘我的email是[email protected],请发邮件到这个email‘
m = re.search(email,strValue)
print(m)  # <re.Match object; span=(0, 26), match=‘我的email是[email protected]‘>
email = ‘[a-zA-Z0-9][email protected](\w+\.)*\w+\.com‘
m = re.search(email,strValue)
print(m)  # <re.Match object; span=(8, 26), match=‘[email protected]‘>
print(m.group())  # [email protected]

原文地址:https://blog.51cto.com/12445535/2465942

时间: 2024-08-16 07:54:20

41 正则中匹配多个字符串匹配任意单个字符正则中使用字符串重复、可选和特殊字符的相关文章

UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)

POINT: 关于表示一个编码:利用code字符数组表示一个编码字符,其中code[len][val]表示长度为len,二进制值为val的字符: 主程序如下: 1 #include <iostream> 2 #include <sstream> 3 #include <cstdio> 4 #include <cstring> 5 #include <cmath> 6 #include <string> 7 #include <v

【Java编程】Java中的字符串匹配

在Java中,字符串的匹配可以使用下面两种方法: 1.使用正则表达式判断字符串匹配 2.使用Pattern类和Matcher类判断字符串匹配 正则表达式的字符串匹配: 正则表达式:定义一组字符串的一系列字符和符号,它由常量字符和特殊符号构成. 下面是正则表达式的一些预定义字符类,实际上是一些转义字符序列: 1.\d   代表任何数字 2.\D  代表任何非数字字符 3.\w  代表任何单字字符(如:字母.数字.下划线等等) 4.\W  代表任何非单字字符 5.\s   代表任何空白字符 6.\S

sql中的字符串匹配、函数大全

1 假设你想建立一个与Yahoo功能相似的Internet目录.你可以建立一个表用来保存一系列的站点名称,统一资源定位器(URL),描述,和类别,并答应访问者通过在HTML form中输入要害字来检索这些内容. 2 假如有一个访问者想从这个目录中得到其描述中包含要害字trading card的站点的列表.要取出正确的站点列表,你也许试图使用这样的查询: 3 4 SELECT site_name FROM site_directory WHERE site_desc=’trading card’

字符串匹配之KMP算法

1.前言: leetcode上的28. Implement strStr()就是一个字符串匹配问题.字符串匹配是计算机的基本任务之一.所以接下来的两篇日志,都对相关的算法进行总结. 2.暴力求解算法 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有: 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符: 如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0.相当于每次匹配失败时,i 回溯

【Offer】[19] 【字符串匹配】

题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式. 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次).在本题中,匹配是指字符串的所有字符匹配整个模式. 例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 思路分析 使用递归函数 matchCore(c

[OpenJudge]带有通配符的字符串匹配

#include <iostream> #include <stdlib.h> #include <string.h> using namespace std; /* 字符串匹配 ?代表一个字符(不能没有),*可以代表任意多个字符(可以为空) ?表示任意字符,也就是说?永远可以匹配成功,本质上,只要遇到?就一定匹配 *的本质,是分割字符串,即如果P=P1*P2,即P得匹配条件是匹配P1串之后,再匹配P2子串 */ //@param  src[], 带匹配的字符串 //@

JPQL模糊匹配单个字符

JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了... 有一个方法,可以使用like查询出来以后,再在java代码里进行过滤.虽然很笨,但也有效

php 常用 正则 表达式 匹配 符号 解释

常用正则表达式全部符号解释 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配 "\" 而 "\(" 则匹配 "(". ^ 匹配输入字符串的开始位置.如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置. $ 匹配输入字符串的结束位置.如果设置了

算法题之字符串匹配问题

我最近复习一道困难程度的算法题,发现了许多有趣之处.在借鉴了他人解法后,发现从最简单的情况反推到原题是一种解锁新进阶的感觉.从递归到动态规划,思维上一步一步递进,如同一部跌宕起伏的小说,记录下来和诸君共赏之. 题目如下: 给你一个字符串?s?和一个字符规律?p,请你来实现一个支持 '.'?和?'*'?的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖?整个?字符串?s的,而不是部分字符串. 说明: s?可能为空,且只包含从?a-z?的小写字母