【卷一】re.split应用

有时候,用re.split()匹配字符串会比findall,search, match等

正则表达式对象方法方便简洁很多!

参考: 《Python核心编程(3rd)》—p23

如果给定分隔符而不是使用像句点 ‘.‘、‘\w‘这样的特殊符号来构成正则表达式,那么re.split()和str.split是一样的

 1 # coding: utf-8
 2
 3 # 导入re, RegEx:(Regular Expressions)正则表达式
 4 import re
 5
 6 # 一般来说,用 "" 包围起来的就是(string)字符串
 7 # print type(txt)可打印txt的类型
 8 txt = "Welcome to our school!"
 9 # 按空格分割字符串
10 print re.split(" ", txt)
11 print "--" * 20
12 # 或者写成txt.split()的形式
13 print txt.split(" ")

点我

下面进入主题,用re.split()来做点事!附上用findall捣鼓的匹配

 1 # coding: utf-8
 2
 3 import re
 4
 5 data = (
 6     "Mountain View, CA 94040",
 7     "Sunnyvale, CA",
 8     "Los Altos, 94023",
 9     "Cupertino 95014",
10     "Palo Alto CA",
11     )
12
13
14 for i in data:
15     # 按后面是5个连续的数字分|按后面是2个连续的大写字母分
16     # 我们要的是总的分组/子组,里面的用(?: )括起来表示不保存!
17     print re.split(r", |(?= (?:\d{5}|[A-Z]{2})) ", i)
18
19     # 按每行字符串的逗号分|按2个连续的大写字母分|按5个连续的数字分|按1个或多个单词+空格分
20     # 我们需要的是外面" "围起来总的分组,也可以加括号更明显地表示,所以里面的子组不保存用(?:)括起来
21     # print re.findall(r".+,|[A-Z]{2}|\d{5}|(?:\w+ )+", i)

展开

.: 是句点,又叫点号,匹配除 ‘\n‘ 外的任何字符

|  :管道符号,a|b 表示匹配a或b,因此又叫择一匹配符号

+: 重复前面的字符1到多次, ‘.+‘ 就是匹配除‘\n‘外的字符多次,也就是

我们要匹配的字符串有多少个字符,它就匹配多少个,‘.+,‘ 匹配任何字符

直到遇到逗号为止!

\w:匹配字母和数字,\w+就是匹配一个单词或多个字母或数字,(\w+ )+

表示匹配多少字母和空格!

\d:是匹配数字,{5}表示匹配前面的字符5次,\d{5}就是匹配5个数字,

$: 表示从后开始匹配,  \d{5}$ 表示匹配后面是五位数字的字符,相对应

的脱字符 ‘^‘ 表示从头开始匹配

[A-Z]是匹配26个大写字母的任一个,[A-Z]{2}就是匹配两个大写字母 !

(?= ):比如(?= (?:\d{5})表示它后面是空格加五位数字的字符,好吧,

乱再来,比如,(\w+)(?= "abc")表示匹配后面是abc的 \w+ 即字母或

者数字!

(?:  ): 通常加括号的比如(\w+)都是我们要的分组,也就是子组,但是有

一些不是我们要的,却不得不要的,所以给它这个符号,表示不保存该分组!

时间: 2024-10-12 08:38:21

【卷一】re.split应用的相关文章

[深入理解Android卷一全文-第九章]深入理解Vold和Rild

由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. 第9章  深入理解Vold和Rild 本章主要内容 ·  介绍Vold. ·  介绍Rild. 本章涉及的源代码文件名称及位置 下面是本章分析的源码文件名及其位置. ·  Main.cpp system/vold/Main.cpp ·  NetlinkManager.cpp system/vold/Netli

SQL Server自定义字符串分割函数——Split

我相信大部分人都碰到过,处理数据的时候,字段的值是以 ',' (逗号)分隔的形式,所以我也不能避免. 然后我才知道,sql 是没有类似于 C# 和 Javascript 这种分割字符串的方法.( Split ) 所以我自己定义了一个 sql 函数(多声明表值函数),代码如下: 1 USE [Test] 2 GO 3 /****** Object: UserDefinedFunction [dbo].[Split] Script Date: 2017/4/14 23:04:08 ******/ 4

C#字符串Split方法的误区

string s = "aaa1bbb2ccc1ddd";        string[] ss = s.Split("12".ToCharArray()); 这句话的意思是1和2每个字符分别是分割关键字,而不是12是分割关键字,一定要弄清晰. 输出值为 aaa bbb ccc ddd

split、rar拆分大文件

split拆分大文件 系统默认自带有 # split -b 2048m aa aa_ -b n[bkm]  b代表512b,k代表1KB,m代表1M 后面aa表示指定文件前缀 结果为:aa_aa aa_ab 合并拆分文件: # cat aa_aa aa_ab > aa rar拆分大文件 # apt-get install rar # rar a -v2048m aa.rar aa 结果为:aa.part1.rar aa.part2.rar 合并并解压: # unrar aa.part1.rar

split 实现(c++ string)

#include <iostream> #include <vector> size_t split(std::string &src, std::vector<std::string> *tokens, std::string sep) { size_t last= 0; size_t index = src.find(sep, last); size_t length = src.size(); while(index != std::string::npo

swift -- 定义空字符串 hasPrefix hasSuffix trim split join range

// 定义空的字符串 var str1 = "" var str2 = String() str1.isEmpty      // 判断字符串是否为空 // 输出字符串中所有的字符 var str3 = "As god name" for c in str3{ println(c) } Int.max   // Int类型的最大值 Int.min   // Int类型的最小值 var arr1 = ["c", "oc", &q

python中的split函数中的参数问题

第一个参数代表的是分割符号,第二个参数表明是split次数. 用下面这个例子测试: str = 'server=mpilgrim&ip=10.10.10.10&port=8080'print str.split('=', 1)[0]print str.split('=', 1)[1]print str.split('=')[0]print str.split('=')[1] 结果是: servermpilgrim&ip=10.10.10.10&port=8080server

[Java]_[初级]_[String的split里的坑]

场景: 1. 有时候需要使用某些字符来作为值的合并存储,比如以@作为分隔符, [email protected]@323232, 用一个属性存储这3个值, 用的时候再拿出来split就可以了. 2. 问题是有时候某个值会缺失,比如第一个值没有的情况, @[email protected]  第2,3个值没有的情况 [email protected]@ ,当然也期望是能返回3个值,只是后边2个值为空字符就行了. 事实上,结果不是这样,即使 2,3个值没有的情况 [email protected]@

guava Splitter 与java 内置的string的split 方法有什么区别.

java内置的会忽略空内容,guava Splitter不会忽略.或者可以自由选择的忽略. /** * {@code Splitter}和{@code Joiner} 这两个对于map的相反的操作,在web框架例如spring mvc中用到过. * * 对于get url后面的参数和pos form中前端参数的连接和后端的拆分都有用到.每个框架的处理思维是一样的. * * @author doctor * * @since 2015年3月14日 下午9:00:17 */ ............