正则

str.split(pattern)::只支持简单匹配,不支持空格和多个匹配进行分割

re.split(pattertn,str) 支持空格和多个匹配进行分割

贪婪模式和非贪婪模式:

1.什么是正则表达式的贪婪与非贪婪匹配

  如:String str="abcaxc";

    Patter p="ab.*c";

  贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab.*c)。

  非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab.*c)。

2.编程中如何区分两种模式

  默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

  量词:{m,n}:m到n个

     *:任意多个

     +:一个到多个

     ?:0或一个

命令行下:
import re
re.split(r'.',sp)
['', '', '', '', '', '', '', '']
sp
'abc.txt'
re.split(r'\.',sp)
['abc', 'txt']
编辑器下:

print(
"""
在 正则中 具有 含义 的 符号 也将 作为 分隔符 的 通用 解决 办法 ,请不要 在 尝试 要有 多少个 ‘\’
""")

delimiters = "a", "...", "(C)"
regexPattern = '|'.join(map(re.escape, delimiters))   # 加|表示或的意思,自己电脑上运行note |不是/而是竖线对应开头的'|' a|\.\.\.|\(C\) 原博客上显示'a|\\.\\.\\.|\\(C\\)'
print(regexPattern)
line = "stackoverflow (C) is awesome... isn't it?"
print(re.split(regexPattern,line)) # ['st', 'ckoverflow ', ' is ', 'wesome', " isn't it?"]
regexPattern1 = ''.join(map(re.escape, delimiters))
print(regexPattern1)
print(re.split(regexPattern1,line))

print(
"""
一些 更 复杂 的 就 需要 你对 正则 表达式 的更 深入 的 了解了 
以下是 stackoverflow的 关于 re.split的 问题 
""")
##split a string like "HELLO there HOW are YOU" by uppercase, thus the result is ['HELLO there', 'HOW are', 'YOU']
line1 = "HELLO there HOW are YOU   "
print(re.split(r"\s+(?=[A-Z]+)", line1))  # 后向匹配

# i want to split “400-IF(3>5,5,5)+34+IF(4>5,5,6)” by string 'IF(3>5,5,5)', so re.split() should give list with length: 2  ['400-', '+34+']
line2 = "400-IF(3>5,5,5)+34+IF(4>5,5,6)"
print(' '.join(re.split(r'IF\(.*?\)',line2)).split())  # 原文理解有错,非贪婪模式,匹配到一个就好IF(3>5,5,5)和IF(3>5,5,5) result:['400-', '+34+']
print(' '.join(re.split(r'IF\(.*\)',line2)).split())  # 贪婪模式:趋于最大长度匹配,IF(3>5,5,5)+34+IF(4>5,5,6) result:['400-']

 

 

 

正则前面的 (?i) (?s) (?m) (?is) (?im)

2017年09月26日 10:15:45

阅读数:225

Q:经常看见的正则前面的 (?i) (?s) (?m) (?is) (?im) 是什么意思?
A: 称为内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁。
  (?i) 表示所在位置右侧的表达式开启忽略大小写模式
  (?s) 表示所在位置右侧的表达式开启单行模式。
  更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。
  注意:(?s)通常在匹配有换行的文本时使用
  (?m) 表示所在位置右侧的表示式开启指定多行模式。
  更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,
  而不只是与整个字符串的开头和结尾匹配。
  注意:(?m)只有在正则表达式中涉及到多行的“^”和“$”的匹配时,才使用Multiline模式。
  上面的匹配模式可以组合使用,比如(?is),(?im)。

  另外,还可以用(?i:exp)或者(?i)exp(?-i)来指定匹配的有效范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值