要匹配的字符串,例如:‘请激活您的集思网账户 发件人 :OpinionWorld 集思网 时间:2019 年 3 月 9 日 19:57 (星期六)’
要求:匹配 "请激活您的集思网账户", "OpinionWorld 集思网", "2019 年 3 月 9 日 19:57 (星期六)" 这三处有效信息,但是测试屡败,以前也没想过匹配中文....
那,这个正则表达式该怎么写啊,虚心求教 T_T !
1
krixaar 2019-03-15 08:54:35 +08:00
如果“发件人:”和“时间:”是固定存在的,直接按这俩匹配出三个.+就行了吧……
|
3
ctro15547 2019-03-15 08:58:44 +08:00
如果只是固定的这一句话,用空格做分隔符,列表再切一下,拼起来不就完事了。。
|
4
delectate 2019-03-15 08:59:43 +08:00
>>> str
'请激活您的集思网账户 发件人 :OpinionWorld 集思网 时间:2019 年 3 月 9 日 19:57 (星期六)' >>> re.findall(r'(.*?) 发件人 :(.*?) 时间:(.*?$)', str) [('请激活您的集思网账户', 'OpinionWorld 集思网', '2019 年 3 月 9 日 19:57 (星期六)')] |
6
CloudMx 2019-03-15 09:02:06 +08:00
\u8bf7\u6fc0\u6d3b\u60a8[^。]+
|
7
CloudMx 2019-03-15 09:02:35 +08:00
@CloudMx 如果是这样结尾:请激活您的集思网账户 发件人 :OpinionWorld 集思网 时间:2019 年 3 月 9 日 19:57 (星期六)。
|
12
imlinhanchao 2019-03-15 09:07:28 +08:00
@Northxw 如果你的 str 是 unicode 格式,那麽你的正則要加上 u:ur'(.*?) 发件人 :(.*?) 时间:(.*?$)'
|
13
Northxw OP @imlinhanchao 不是 Unicode, 单纯中文字符,网页上一般是 UTF8。
|
14
CloudMx 2019-03-15 09:12:06 +08:00
\u8bf7\u6fc0\u6d3b\u60a8(.)+\)
|
15
weixuan 2019-03-15 09:24:51 +08:00
4L 给出了答案,不用 r 前缀他的表达式也可以解决你的这个问题,你给的字符串没有涉及到转义的,使用 r 前缀就不用考虑转义的问题,因为 Python 的字符串本身也用\转义。比如 'ABC\\-001' ,对应的正则表达式字符串是'ABC\-001',使用 r'ABC\-001',对应的正则表达式字符串就是'ABC\-001'不变。
|
16
CloudMx 2019-03-15 09:26:43 +08:00
请激活.+\) Python2 HTML-->UTF-8
|
19
freakxx 2019-03-15 09:49:46 +08:00
.*(?=\s 发件人)|(?<=发件人\s(:|:)).*(?=\s 时间)|(?<=时间(:|:)).*
不过需要看具体文本再看怎么写,可能前面还附带东西或者后面 习惯写大概这样 compiles = [ .*(?=\s 发件人) (?<=发件人\s(:|:)).*(?=\s 时间) (?<=时间(:|:)).* ] compiles = "|".join(compiles) |
22
TimePPT 2019-03-15 10:10:21 +08:00 via iPhone
要是这玩意本身就是邮件,建议直接读邮件头
|
23
Northxw OP |