python 正则表达式点号与'\n'符号的问题

遇到了一个小虫,特记录之。

1.正则表达式及英文的处理如下:

>>> import re
>>> b=‘adfasdfasf<1safadsaf>23wfsa<13131>‘
>>> pat = re.compile(‘<.*?>‘)
>>> pat.findall(b)
[‘<1safadsaf>‘, ‘<13131>‘]

 

2. 换成中文貌似就没反应了

>>> msg="<Fault warning -- \xb4\xed\xce\xf3!\n\n\xb2\xfa\xc6\xb7\xb1\xe0\xba\xc5\xb1\xd8\xd0\xe8\xce\xa8\xd2\xbb,\xd0\xc2\xb1\xe0\xba\xc53123\xb6\xd4\xd3\xa6\xb5\xc4\xb2\xfa\xc6\xb7\xd2\xd1\xbe\xad\xb4\xe6\xd4\xda!\n\xc8\xe7\xb9\xfb\xc4\xfa\xca\xd4\xcd\xbc\xcd\xa8\xb9\xfd\xb8\xb4\xd6\xc6\xc0\xb4\xc9\xfd\xbc\xb6\xb2\xfa\xc6\xb7\xd4\xf2\xcb\xb5\xc3\xf7\xb4\xcb\xb2\xfa\xc6\xb7\xd2\xd1\xbe\xad\xb4\xe6\xd4\xda\xc9\xfd\xbc\xb6\xb0\xe6\xa3\xac\xc7\xeb\xc1\xf4\xd2\xe2\xa1\xa3: ‘‘>"
>>> pat.findall(msg)
[]

仔细分析了下貌似因为其中的\n字符!

甚为不解,又try了一把:

>>> msg =‘<\r>asdasf<asdfaf>‘
>>> pat.findall(msg)
[‘<\r>‘, ‘<asdfaf>‘]
>>> msg=‘<\n>adf<afd>‘
>>> pat.findall(msg)
[‘<afd>‘]
>>> msg=‘<\s>adaf<asdfa>‘
>>> pat.findall(msg)
[‘<\\s>‘, ‘<asdfa>‘]
>>> msg=‘<\n>asdfasf<asfa>‘
>>> pat.findall(msg)
[‘<asfa>‘]

确实点号无法匹配特殊字符‘\n‘!

这里找到了说明。

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。

3.[.\n]的尴尬情况

>>> pat= re.compile(‘<[.\n]*?>‘)
>>> pat.findall(msg)
[‘<\n>‘]
>>> msg
‘<\n>asdfasf<asfa>‘
>>> msg=‘<\nasdfs>adaf<adaf>‘
>>> pat.findall(msg)
[]

  

暂时没有更好的解

python 正则表达式点号与'\n'符号的问题

时间: 2024-10-06 00:01:41

python 正则表达式点号与'\n'符号的问题的相关文章

Python正则表达式Regular Expression基本用法

资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表达式re模块的基本函数. (1)findall函数的用法 findall(rule,target[,flag])是在目标字符串中找到符合规则的字符串.参数说明:rule表示规则,target表示目标字符串,[,flag]表示的是规则选项.返回的结果是一个列表.若没找到符合的,是一个空列表. 如: 因

Python——正则表达式(5)

本文译自官方文档: Regular Expression HOWTO 参考文章: Python--正则表达式(1) Python--正则表达式(2) Python--正则表达式(3) Python--正则表达式(4) 全文下载: Python正则表达式基础 ====================================================================================== 6.常见问题 正则表达式在应用中是非常强大的工具,但有时候它们并不能

Python正则表达式学习摘要及资料

摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2,4}? 只匹配 2 个 a. ^表示行的开头,^\d表示必须以数字开头. $表示行的结束,\d$表示必须以数字结束. 你可能注意到了,py也可以匹配'python'-->py;但是加上^py$就变成了整行匹配,就只能匹配'py'了,匹配'python'时,就什么也得不到. 参考表 正则表达式特殊序

Python 正则表达式学习摘要及资料

来源:Michael_翔_ 摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2,4}? 只匹配 2 个 a. ^表示行的开头,^\d表示必须以数字开头. $表示行的结束,\d$表示必须以数字结束. 你可能注意到了,py也可以匹配'python'–>py; 但是加上^py$就变成了整行匹配,就只能匹配'py'了,匹配'python'时,就什么也得不到

python 正则表达式规则收集

python正则表达式基本元字符 .   通配符,匹配所有字符 ^abc  匹配以abc开始的字符串 abc$  匹配以abc结尾的字符串 [abc]  匹配字符集合 [A-Z0-9] 匹配字符范围 ed|ing|s 匹配指定的字符串,诸如ed或者ing或者s *   前面项目0个或者多个,如a*/[a-z]* (也叫Kleene闭包) +   前面项目1个或者多个,如a+.[a-z]+ ?   前面项目0个或者1个,如a?.[a-z]? {n}   重复n次 {n,}  至少重复n次 {,n}

Python学习:13.Python正则表达式

一.正则表达式简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言, (在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被 编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模

Python正则表达式初识(六)

继续分享Python正则表达式基础,今天给大家分享的正则表达式特殊符号是"[]".中括号十分实用,其有特殊含义,其代表的意思是中括号中的字符只要满足其中任意一个就可以.其用法一共有三种,分别对其进行具体的代码演示,在最后进行总结,具体的教程如下. 1.如下图所示,匹配模式为[abcd],在这里正则表达式代表的意思是字符串第一个字符是abcd四个字符中的任意一个,然后后面的字符是"cpeng123",如果满足匹配条件,则输出结果,如果不满足,则不显示任何结果,如下图所

python正则表达式详解

python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的.下面,我来介绍一下python中的正则表达式是怎么使用的. 首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用

python 正则表达式基础

又一段时间没写博客了 最近一段时间在写pygame 又忽略了博客 今天因要帮朋友修改电影字幕 用到了正则表达式 重新学了一遍 发现还是得多练 才能算渐渐掌握 python 正则表达式 1.1介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持