在本文中,我们将为您详细介绍Python-提取正则表达式匹配项的一部分的相关知识,并且为您解答关于python正则提取的疑问,此外,我们还会提供一些关于php–正则表达式匹配字符串的一部分、pytho
在本文中,我们将为您详细介绍Python-提取正则表达式匹配项的一部分的相关知识,并且为您解答关于python 正则 提取的疑问,此外,我们还会提供一些关于php – 正则表达式匹配字符串的一部分、python – 正则表达式匹配字符串上的正则表达式匹配返回无、python 正则表达式匹配IP地址、Python 正则表达式匹配中文字符的有用信息。
本文目录一览:- Python-提取正则表达式匹配项的一部分(python 正则 提取)
- php – 正则表达式匹配字符串的一部分
- python – 正则表达式匹配字符串上的正则表达式匹配返回无
- python 正则表达式匹配IP地址
- Python 正则表达式匹配中文字符
Python-提取正则表达式匹配项的一部分(python 正则 提取)
我想要一个正则表达式从HTML页面提取标题。目前我有这个:
title = re.search(''<title>.*</title>'', html, re.IGNORECASE).group()if title: title = title.replace(''<title>'', '''').replace(''</title>'', '''')
是否有一个正则表达式仅提取<title>
的内容,所以我不必删除标签?
答案1
小编典典用( )
在正则表达式和group(1)python
中检索捕获的字符串(re.search
将返回None
如果没有找到结果,所以不要用group()
直接):
title_search = re.search(''<title>(.*)</title>'', html, re.IGNORECASE)if title_search: title = title_search.group(1)
php – 正则表达式匹配字符串的一部分
我有这种类型的字符串:
为aabbcc-12-00001-g001-1024.png
ddeeffgg-1-50001-i001-500.jpg
ddeeffgg-1-50001-i001.jpg
我想提取没有文件大小的文件名,在文件扩展名之前总是-xxx或-xxxx.
例如,对于三个字符串,我想匹配:
为aabbcc-12-00001-g001.png
ddeeffgg-1-50001-i001.jpg
ddeeffgg-1-50001-i001.jpg
我的想法是先行大小,然后使用preg_replace与PHP,但不知道如何只匹配大小,尝试:
-\d{3,4}\.[a-z]{3}
但这匹配-550.png或-1024.jpg等.
解决方法:
您可以将preg_replace与替换一起使用:
$str = 'aabbcc-12-00001-g001-1024.png';
$result = preg_replace('/(-\d+)(.[A-Z]+)$/i', '$2', $str);
echo $result;
python – 正则表达式匹配字符串上的正则表达式匹配返回无
我正在为一个subreddit制作一个小机器人.为此,我从trakt.tv中删除了一些数据.报废后我跑了一点正则表达式
obituarySecondary = re.match(r"^([\w \,\.\"]+,\d{4} ?- ?\w+ \d+,?\d{4})",obituaryRaw).group(0)
我得到了Nathaniel Fisher,Sr.1943-2000所需的结果
现在我在obituarySecondary上运行了另一个正则表达式
timeline = "\n\n" + re.match(r'(\d{4} ?- ?\d{4})',obituarySecondary).group(0)
但这总是回归.
我在https://regex101.com/上运行了相同的正则表达式以确保我正确处理并且字符串匹配,但不在我的系统上.
解决方法
有关更多详细信息,请查看this StackOverflow问题
python 正则表达式匹配IP地址
一、实验环境
1.Windows7x64_SP1
2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装)
3.pyinstaller3.0
二、实验目的
从text文本中获取字符串,筛选合法IP地址
2.1 文本内容如下
请输入合法IP地址,非法IP地址和其他字符将被过滤!
增、删、改IP地址后,请保存、关闭记事本!
192.168.8.84
192.168.8.85
192.168.8.86
0.0.0.1
256.1.1.1
192.256.256.256
192.255.255.255
aa.bb.cc.dd
2.2 编写函数读取文本文件,筛选合法IP地址
def get_ip_list(self):
try:
file = open(self.smart_ip_list_file, ''r'')
str = file.readlines()
str_del_enter = [x.strip(''\n'') for x in str] #去除\n
comp = re.compile(r''^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}'')
str_legal_ip = [x for x in str_del_enter if comp.match(x)] #筛选合法IP地址
file.close()
return str_legal_ip
except:
self.ui.textEdit.setText(''读取"%s"报错'' %(self.smart_ip_list_file))
return []
2.3 代码说明
1.从文本文件中读取所有行,除首行外均以\n结束,如下代码用于去除\n
str_del_enter = [x.strip(''\n'') for x in str]
2.IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开
根据规则:每段相同,范围都在 0 ~ 255
0~255 对应的正则表达式为 (2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2}
- 2(5[0-5]|[0-4]\d) 匹配:200 ~ 255
- [0-1]?\d{1,2} 匹配:0 ~ 199
0 到 255 的式子已经写出来了,那么一共四段再加上中间的点就很容易了
- 后边“点”和“数字”重复三次就可以了,(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
- 全部合起来,((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
通过如上正则表达式匹配字符串,存在如下问题
256.1.1.1 -> 匹配结果56.1.1.1
解决方式,如上表达式前面添加^,最终调用compile函数,参数方式如下
comp = re.compile(r''^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}'')
Python 正则表达式匹配中文字符
参照Python正则表达式指南
在使用Python的过程中,由于需求原因,我们经常需要在文本或者网页元素中用Python正则表达式匹配中文,但是我们经常所熟知的正则表达式却只能匹配英文,而对于中文编码却望尘莫及,于是我大量Google,几经Baidu,花了两个多个小时测试,终于发现解决的办法。特记录如下
从字符串的角度来说,中文不如英文整齐、规范,这是不可避免的现实。本文结合网上资料以及个人经验,以 python 语言为例,稍作总结。欢迎补充或挑错。
通常我们可以使用 repr()函数查看字串的原始格式。这对于写正则表达式有所帮助。
Python正则表达式的问题
更加详细的Python正则表达式问题,请参见这里http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
Python 的 re模块有两个相似的函数:re.match(),re.search 。
两个函数的匹配过程完全一致,只是起点不同。
match只从字串的开始位置进行匹配,如果失败,它就此放弃;
而search则会锲而不舍地完全遍历整个字串中所有可能的位置,直到成功地找到一个匹配,或者搜索完字串,以失败告终。
如果你了解match的特性(在某些情况下比较快),大可以自由用它;如果不太清楚,search通常是你需要的那个函数。
从一堆文本中,找出所有可能的匹配,以列表的形式返回,这种情况用findall()这个函数。例子见后面的代码。
UTF-8与unicode
UTF-8 是变长的,1-6个字节,少数是汉字每个占用3个字节,多数占用4个字节,正则式为[\x80-\xff]{3},这个都知道了吧。
unicode下,汉字的格式如\uXXXX,只要找到对应的字符集的范围,就能匹配相应的字串,方便从多语言文本中挑出所需要的某种语言的文本。不过,对于像日文这样的粘着语,既有中文字符,又有平假名片假名,或许结果会有所偏差。
两种字符类可以并列在一起使用,例如,平假名、片假名、中文的放在一起,u"[\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff]+",来自定义所需要匹配的文本。
匹配中文时,正则表达式和目标字串的格式必须相同。这一点至关重要。或者都用默认的utf8,此时你不用额外做什么;如果是unicode,就需要在正则式之前加上u""格式。
可以这样定义unicode字符串:string=u"我爱正则表达式"。如果字串不是unicode的,可以使用unicode()函数转换之。如果你知道源字串的编码,可以使用newstr=unicode(oldstring,original_coding_name)的方式转换,
例如 linux 下常用unicode(string,"utf8"),windows 下或许会用cp936吧
样例
# -*- coding: utf-8 -*- import sys import re reload(sys) sys.setdefaultencoding('utf8') s=""" en: Regular expression is a powerful tool for manipulating text. zh: 汉语是世界上最优美的语言,正则表达式是一个很有用的工具 jp: 正规表现は非常に役に立つツールテキストを操作することです。 jp-char: あアいイうウえエおオ kr:�3�4�8�1 �5�7�6�1�2�8�3�1 �0�1�3�7 �3�9�3�0�6�3 �9�3�7�9 �5�4�2�1�5�7�0�7 �3�5�3�2�6�9�8�9 �7�6�3�0�9�1�9�9. """ print "原始utf8字符" #utf8 print "--------" print repr(s) print "--------\n" #非ansi re_words=re.compile(r"[\x80-\xff]+") m = re_words.search(s,0) print "非ansi字符" print "--------" print m print m.group() print "--------\n" #unicode s = unicode(s) print "原始unicode字符" print "--------" print repr(s) print "--------\n" #unicode chinese re_words = re.compile(u"[\u4e00-\u9fa5]+") m = re_words.search(s,0) print "unicode 中文" print "--------" print m print m.group() res = re.findall(re_words, s) # 查询出所有的匹配字符串 if res: print "There are %d parts:\n"% len(res) for r in res: print "\t",r print print "--------\n" #unicode korean re_words=re.compile(u"[\uac00-\ud7ff]+") m = re_words.search(s,0) print "unicode 韩文" print "--------" print m print m.group() print "--------\n" #unicode japanese katakana re_words=re.compile(u"[\u30a0-\u30ff]+") m = re_words.search(s,0) print "unicode 日文 片假名" print "--------" print m print m.group() print "--------\n" #unicode japanese hiragana re_words=re.compile(u"[\u3040-\u309f]+") m = re_words.search(s,0) print "unicode 日文 平假名" print "--------" print m print m.group() print "--------\n" #unicode cjk Punctuation re_words=re.compile(u"[\u3000-\u303f\ufb00-\ufffd]+") m = re_words.search(s,0) print "unicode 标点符号" print "--------" print m print m.group() print "--------\n"
几种主要非英文字符集的编码范围
下面是Google出现的几种主要非英文字符集的编码范围
主要非英文语系字符范围 | ||
范围 | 编码 | 说明 |
2E80~33FFh | 中日韩符号区 | 收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。 |
3400~4DFFh | 中日韩认同文字扩充A区 | 中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。 |
4E00~9FFFh | 中日韩认同表意文字区 | 中日韩认同表意文字区,总计收容20,902个中日韩汉字。 |
A000~A4FFh | 彝族文字区 | 收容中国南方彝族文字和字根 |
AC00~D7FFh | 韩文拼音组合字区 | 收容以韩文音符拼成的文字 |
F900~FAFFh | 中日韩兼容表意文字区 | 总计收容302个中日韩汉字 |
FB00~FFFDh | 文字表现形式区 | 收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。 |
比如需要匹配所有中日韩非符号字符,那么正则表达式应该是^[\u3400-\u9FFF]+$
理论上没错,可是我到msn.co.ko随便复制了个韩文下来,发现根本不对,诡异
再到msn.co.jp复制了个’お’,也不得行..
然后把范围扩大到^[\u2E80-\u9FFF]+$,这样倒是都通过了,这个应该就是匹配中日韩文字的正则表达式了,包括我们台湾省还在盲目使用的繁体中文
而关于中文的正则表达式,应该是^[\u4E00-\u9FFF]+$,和论坛里常被人提起的^[\u4E00-\u9FA5]+$很接近
需要注意的是论坛里说的^[\u4E00-\u9FA5]+$这是专门用于匹配简体中文的正则表达式,实际上繁体字也在里面,我用测试器测试了下’中华人民共和国’,也通过了,当然,^[\u4E00-\u9FFF]+$也是一样的结果。
样例2
那么我们很多时候如果要匹配的内容如果既有中文也有英文,比如我们要匹配一个可以由中文字母以及一些其他字符组成的标题,该怎么写呢,我么接着看下面的代码
#!coding:utf-8 import re import sys # 测试匹配中文信息 def TestReChinese( ): source = u" 数据结构模版----单链表SimpleLinkList[带头结点&&面向对象设计思想](C语言实现)" temp = source.decode('utf8') print "同时匹配中文英文" print "--------------------------" xx = u"([\w\W\u4e00-\u9fff]+)" pattern = re.compile(xx) results = pattern.findall(temp) for result in results: print result print "--------------------------" print print print "只匹配中文" print "--------------------------" xx = u"([\u4e00-\u9fff]+)" pattern = re.compile(xx) results = pattern.findall(temp) for result in results: print result print "--------------------------" if __name__ == "__main__" : # 测试正则表达式 reload(sys) sys.setdefaultencoding("utf-8") TestReChinese( )
原文:http://blog.csdn.net/gatieme/article/details/43235791
http://blog.csdn.net/gatieme/article/details/43275077
关于Python-提取正则表达式匹配项的一部分和python 正则 提取的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于php – 正则表达式匹配字符串的一部分、python – 正则表达式匹配字符串上的正则表达式匹配返回无、python 正则表达式匹配IP地址、Python 正则表达式匹配中文字符的相关知识,请在本站寻找。
本文标签: