python正则替换?python各种库包下载
各位老铁们,大家好,今天由我来为大家分享python正则替换,以及python各种库包下载的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
Python正则表达式如何进行字符串替换
基于文本文档(Markdown)设想好需要的基本需要的表、字段、类型;
使用 Rails Migration随着功能的开发逐步创建表;
随着细节功能的开发、需求,逐步增加字段,删除字段,或者调整字段类型;
第一个 Release的时候清理 Migrations合并成一个;
随着后期的改动,逐步增加、修改、删除字段或表。
基本上我的所有项目都是这么搞的,这和项目是否复杂无关。
所以我前面为什么说思路需要转变。
Python正则表达式的几种匹配用法
下面列出: 1.测试正则表达式是否匹配字符串的全部或部分regex=ur""#正则表达式
if re.search(regex, subject): do_something()else: do_anotherthing() 2.测试正则表达式是否匹配整个字符串 regex=ur"/Z"#正则表达式末尾以/Z结束
if re.match(regex, subject): do_something()else: do_anotherthing() 3.创建一个匹配对象,然后通过该对象获得匹配细节(Create an object with details about how the regex matches(part of) a string) regex=ur""#正则表达式
match= re.search(regex, subject)if match:# match start: match.start()# match end(exclusive): atch.end()# matched text: match.group() do_something()else: do_anotherthing() 4.获取正则表达式所匹配的子串(Get the part of a string matched by the regex) regex=ur""#正则表达式
match= re.search(regex, subject)if match: result= match.group()else: result="" 5.获取捕获组所匹配的子串(Get the part of a string matched by a capturing group) regex=ur""#正则表达式
match= re.search(regex, subject)if match: result= match.group(1)else: result="" 6.获取有名组所匹配的子串(Get the part of a string matched by a named group) regex=ur""#正则表达式
match= re.search(regex, subject)if match:result= match.group"groupname")else:result="" 7.将字符串中所有匹配的子串放入数组中(Get an array of all regex matches in a string) result= re.findall(regex, subject) 8.遍历所有匹配的子串(Iterate over all matches in a string) for match in re.finditer(r"<(.*?)/s*.*?//1>", subject)# match start: match.start()# match end(exclusive): atch.end()# matched text: match.group() 9.通过正则表达式字符串创建一个正则表达式对象(Create an object to use the same regex for many operations) reobj= re.compile(regex) 10.用法1的正则表达式对象版本(use regex object for if/else branch whether(part of) a string can be matched) reobj= re.compile(regex)if reobj.search(subject): do_something()else: do_anotherthing() 11.用法2的正则表达式对象版本(use regex object for if/else branch whether a string can be matched entirely) reobj= re.compile(r"/Z")#正则表达式末尾以/Z结束
if reobj.match(subject): do_something()else: do_anotherthing() 12.创建一个正则表达式对象,然后通过该对象获得匹配细节(Create an object with details about how the regex object matches(part of) a string) reobj= re.compile(regex) match= reobj.search(subject)if match:# match start: match.start()# match end(exclusive): atch.end()# matched text: match.group() do_something()else: do_anotherthing() 13.用正则表达式对象获取匹配子串(Use regex object to get the part of a string matched by the regex) reobj= re.compile(regex) match= reobj.search(subject)if match: result= match.group()else: result="" 14.用正则表达式对象获取捕获组所匹配的子串(Use regex object to get the part of a string matched by a capturing group) reobj= re.compile(regex) match= reobj.search(subject)if match: result= match.group(1)else: result="" 15.用正则表达式对象获取有名组所匹配的子串(Use regex object to get the part of a string matched by a named group) reobj= re.compile(regex) match= reobj.search(subject)if match: result= match.group("groupname")else: result="" 16.用正则表达式对象获取所有匹配子串并放入数组(Use regex object to get an array of all regex matches in a string) reobj= re.compile(regex) result= reobj.findall(subject) 17.通过正则表达式对象遍历所有匹配子串(Use regex object to iterate over all matches in a string) reobj= re.compile(regex)for match in reobj.finditer(subject):# match start: match.start()# match end(exclusive): match.end()# matched text: match.group()字符串替换 1.替换所有匹配的子串#用newstring替换subject中所有与正则表达式regex匹配的子串
result= re.sub(regex, newstring, subject) 2.替换所有匹配的子串(使用正则表达式对象) reobj= re.compile(regex) result= reobj.sub(newstring, subject)字符串拆分 1.字符串拆分 result= re.split(regex, subject) 2.字符串拆分(使用正则表示式对象) reobj= re.compile(regex) result= reobj.split(subject)
告别正则表达式,这个Python库可以快M倍
FlashText算法是由 Vikash Singh于2017年发表的大规模关键词替换算法,这个算法的时间复杂度仅由文本长度(N)决定,算法时间复杂度为O(N)。
而对于正则表达式的替换,算法时间复杂度还需要考虑被替换的关键词数量(M),因此时间复杂度为O(MxN)。
简而言之,基于FlashText算法的字符串替换比正则表达式替换快M倍以上,这个M是需要替换的关键词数量,关键词越多,FlashText算法的优势就越明显。
下面就给大家介绍如何在 Python中基于 flashtext模块使用 FlashText算法进行字符串查找和替换,如果觉得对你的项目团队很有帮助,请记得帮作者转发一下哦。
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南进行安装。
(可选1)如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.
(可选2)此外,推荐大家用VSCode编辑器,它有许多的优点:Python编程的最好搭档—VSCode详细指南。
请选择以下任一种方式输入命令安装依赖:
1. Windows环境打开 Cmd(开始-运行-CMD)。
2. MacOS环境打开 Terminal(command+空格输入Terminal)。
3.如果你用的是 VSCode编辑器或 Pycharm,可以直接使用界面下方的Terminal.
pip install flashtext
2.基本使用
提取关键词
一个最基本的提取关键词的例子如下:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
keyword_processor= KeywordProcessor()
# 2.添加关键词
keyword_processor.add_keyword('Big Apple','New York')
keyword_processor.add_keyword('Bay Area')
# 3.处理目标句子并提取相应关键词
keywords_found= keyword_processor.extract_keywords('I love Big Apple and Bay Area.')
# 4.结果
print(keywords_found)
# ['New York','Bay Area']
其中 add_keyword的第一个参数代表需要被查找的关键词,第二个参数是给这个关键词一个别名,如果找到了则以别名显示。
替换关键词
如果你想要替换关键词,只需要调用处理器的 replace_keywords函数:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
keyword_processor= KeywordProcessor()
# 2.添加关键词
keyword_processor.add_keyword('New Delhi','NCR region')
# 3.替换关键词
new_sentence= keyword_processor.replace_keywords('I love Big Apple and new delhi.')
# 4.结果
print(new_sentence)
#'I love New York and NCR region.'
关键词大小写敏感
如果你需要精确提取,识别大小写字母,那么你可以在处理器初始化的时候设定 sensitive参数:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器,注意设置大小写敏感(case_sensitive)为TRUE
keyword_processor= KeywordProcessor(case_sensitive= True)
# 2.添加关键词
keyword_processor.add_keyword('Big Apple','New York')
keyword_processor.add_keyword('Bay Area')
# 3.处理目标句子并提取相应关键词
keywords_found= keyword_processor.extract_keywords('I love big Apple and Bay Area.')
# 4.结果
print(keywords_found)
# ['Bay Area']
标记关键词位置
如果你需要获取关键词在句子中的位置,在 extract_keywords的时候添加 span_info=True参数即可:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
keyword_processor= KeywordProcessor()
# 2.添加关键词
keyword_processor.add_keyword('Big Apple','New York')
keyword_processor.add_keyword('Bay Area')
# 3.处理目标句子并提取相应关键词,并标记关键词的起始、终止位置
keywords_found= keyword_processor.extract_keywords('I love big Apple and Bay Area.', span_info= True)
# 4.结果
print(keywords_found)
# [('New York', 7, 16),('Bay Area', 21, 29)]
获取目前所有的关键词
如果你需要获取当前已经添加的所有关键词,只需要调用处理器的 get_all_keywords函数:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
keyword_processor= KeywordProcessor()
# 2.添加关键词
keyword_processor.add_keyword('j2ee','Java')
keyword_processor.add_keyword('colour','color')
# 3.获取所有关键词
keyword_processor.get_all_keywords()
# output:{'colour':'color','j2ee':'Java'}
批量添加关键词
批量添加关键词有两种方法,一种是通过词典,一种是通过数组:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
keyword_processor= KeywordProcessor()
# 2.(第一种)通过字典批量添加关键词
keyword_dict={
"java": ["java_2e","java programing" ],
"product management": ["PM","product manager" ]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 2.(第二种)通过数组批量添加关键词
keyword_processor.add_keywords_from_list(["java","python" ])
# 3.第一种的提取效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')
# output ['product management','java']
单一或批量删除关键词
删除关键词也非常简单,和添加类似:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
keyword_processor= KeywordProcessor()
# 2.通过字典批量添加关键词
keyword_dict={
"java": ["java_2e","java programing" ],
"product management": ["PM","product manager" ]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 3.提取效果如下
print(keyword_processor.extract_keywords('I am a product manager for a java_2e platform'))
# ['product management','java']
# 4.单个删除关键词
keyword_processor.remove_keyword('java_2e')
# 5.批量删除关键词,也是可以通过词典或者数组的形式
keyword_processor.remove_keywords_from_dict({"product management": ["PM" ]})
keyword_processor.remove_keywords_from_list(["java programing" ])
# 6.删除了java programing关键词后的效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')
# ['product management']
3.高级使用
支持额外信息
前面提到在添加关键词的时候第二个参数为其别名,其实你不仅可以指示别名,还可以将额外信息放到第二个参数中:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
kp= KeywordProcessor()
# 2.添加关键词并附带额外信息
kp.add_keyword('Taj Mahal',('Monument','Taj Mahal'))
kp.add_keyword('Delhi',('Location','Delhi'))
# 3.效果如下
kp.extract_keywords('Taj Mahal is in Delhi.')
# [('Monument','Taj Mahal'),('Location','Delhi')]
这样,在提取关键词的时候,你还能拿到其他一些你想要在得到此关键词时输出的信息。
支持特殊单词边界
Flashtext检测的单词边界一般局限于 w [A-Za-z0-9_]外的任意字符,但是如果你想添加某些特殊字符作为单词的一部分也是可以实现的:
from flashtext import KeywordProcessor
# 1.初始化关键字处理器
keyword_processor= KeywordProcessor()
# 2.添加关键词
keyword_processor.add_keyword('Big Apple')
# 3.正常效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# ['Big Apple']
# 4.将'/'作为单词一部分
keyword_processor.add_non_word_boundary('/')
# 5.优化后的效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# []
4.结尾
个人认为这个模块已经满足我们的基本使用了,如果你有一些该模块提供的功能之外的使用需求,可以给 flashtext贡献代码:
附 FlashText与正则相比查询关键词所花费的时间之比:
附 FlashText与正则相比替换关键词所花费的时间之比:
这篇文章如果对你有帮助的话,记得转发一下哦。
如果你还想了解更多这方面的信息,记得收藏关注本站。