精华内容
下载资源
问答
  • python字符串部分匹配
    千次阅读
    2021-01-29 14:16:10

    我有两个列表,我想比较,如果有任何匹配(即使是部分),然后执行一些操作.我已经设置了这个测试代码:

    keywords = ['social media','social business','social networking','social marketing','online marketing','social selling',

    'social customer experience management','social cxm','social cem','social crm','google analytics','seo','sem',

    'digital marketing','social media manager','community manager']

    metakeywords = ['top 10', 'social media blog', 'social media blog nomination']

    if any(key in metakeywords for key in keywords):

    print 'Ok'

    如您所见,第一项关键字与第二项和第三项关键字之间存在部分匹配,因此应打印确定.我怎样才能做到这一点?

    谢谢!

    达尼

    更多相关内容
  • python in 字符串列表 部分匹配

    千次阅读 2022-04-29 21:00:30
    in 字符串匹配时,为部分匹配 in 列表匹配时,为完全匹配 如何对列表中的对象进行部分匹配呢 word="hello" word_list=["hello world","today is sunny","happy new year"] # 方案1 result=[] for text in str1: if...
    word="hello"
    word_list="hello world"
    if word in word_list:
    	print("True")
    else:
    	print("False")
    	
    result:True
    
    word="hello"
    word_list=["hello world","today is sunny","happy new year"]
    if word in word_list:
    	print("True")
    else:
    	print("False")
    	
    # result:False
    
    word="hello"
    word_list=["hello","today is sunny","happy new year"]
    if word in word_list:
    	print("True")
    else:
    	print("False")
    
    # result:True
    

    结论:
    in 字符串匹配时,为部分匹配
    in 列表匹配时,为完全匹配

    如何对列表中的对象进行部分匹配呢

    word="hello"
    word_list=["hello world","today is sunny","happy new year"]
    
    # 方案1
    result=[]
    for text in str1:
    	if str in text:
    		result.append(text)
    
    # 方案2
    result = [v for v in word_list if word in v]
    
    # 方案3 
    result=list(filter(lambda x: word in x, word_list))
    
    #大小写转换
    l = list(map(str.lower, l)) 映射字符串列表为小写
    word1=word.lower(),word1小写 但word不变
    	
    # result:a=["hello world"]
    
    展开全文
  • KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的...
  • 主要介绍了Python字符串匹配算法KMP实现方法,实例分析了Python针对字符串操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • fuzzywuzzy:Python中的字符串模糊匹配
  • 主要介绍了Python实现字符串匹配算法代码示例,涉及字符串匹配存在的问题,蛮力法字符串匹配,Horspool算法,具有一定参考价值,需要的朋友可以了解下。
  • 主要介绍了Python做简单的字符串匹配详解的相关资料,需要的朋友可以参考下
  • 1. re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 import re line="this hdr-biz 123 model server 456" pattern=r"123" matchObj = re.match( pattern, line)...
  • Python字符串模糊匹配库FuzzyWuzzy

    千次阅读 2021-01-25 13:45:51
    Python字符串模糊匹配库FuzzyWuzzy 在计算机科学中,字符串模糊匹配(fuzzy string matching)是一种近似地(而不是精确地)查找与模式匹配的字符串的技术。换句话说,字符串模糊匹配是一种搜索,即使用户拼错...

    Python字符串模糊匹配库FuzzyWuzzy

    在计算机科学中,字符串模糊匹配(fuzzy string matching)是一种近似地(而不是精确地)查找与模式匹配的字符串的技术。换句话说,字符串模糊匹配是一种搜索,即使用户拼错单词或只输入部分单词进行搜索,也能够找到匹配项。因此,它也被称为字符串近似匹配。

    字符串模糊搜索可用于各种应用程序,例如:

    • 拼写检查和拼写错误纠正程序。例如,用户在Google中键入“Missisaga”,将返回文字为“Showing results for mississauga”的点击列表。也就是说,即使用户输入缺少字符、有多余的字符或者有其他类型的拼写错误,搜索查询也会返回结果。
    • 重复记录检查。例如,由于名称拼写不同(例如Abigail Martin和Abigail Martinez)在数据库中被多次列出。

    这篇文章将解释字符串模糊匹配及其用例,并使用Python中Fuzzywuzzy库给出示例。

    使用FuzzyWuzzy合并酒店房型

    每个酒店都有自己的命名方法来命名它的房间,在线旅行社(OTA)也是如此。例如,同一家酒店的一间客房Expedia将之称为“Studio, 1 King Bed with Sofa Bed, Corner”,Booking.com(缤客)则简单地将其显示为“Corner King Studio”。不能说有谁错了,但是当我们想要比较OTA之间的房价时,或者一个OTA希望确保另一个OTA遵循费率平价协议时(rate parity agreement),这可能会导致混乱。换句话说,为了能够比较价格,我们必须确保我们进行比较的东西是同一类型的。对于价格比较网站和应用程序来说,最令人头条的问题之一就是试图弄清楚两个项目(比如酒店房间)是否是同一事物。

    Fuzzywuzzy是一个Python库,使用编辑距离(Levenshtein Distance)来计算序列之间的差异。为了演示,我创建了自己的数据集,也就是说,对于同一酒店物业,我从Expedia拿一个房间类型,比如说“Suite, 1 King Bed (Parlor)”,然后我将它与Booking.com中的同类型房间匹配,即“King Parlor Suite”。只要有一点经验,大多数人都会知道他们是一样的。按照这种方法,我创建了一个包含100多对房间类型的小数据集,可以访问Github下载

    我们使用这个数据集测试Fuzzywuzzy的做法。换句话说,我们使用Fuzzywuzzy来匹配两个数据源之间的记录。

    import pandas as pd
    df = pd. read_csv ( '../input/room_type.csv' )
    df. head ( 10 )
    import pandas as pd

    df = pd.read_csv(’…/input/room_type.csv’)
    df.head(10)

    import pandas as pd

    df = pd.read_csv(’…/input/room_type.csv’)
    df.head(10)

    有几种方法可以比较Fuzzywuzzy中的两个字符串,让我们一个一个地进行尝试。

    ratio ,按顺序比较整个字符串的相似度

    from fuzzywuzzy import fuzz
    fuzz. ratio ( 'Deluxe Room, 1 King Bed' , 'Deluxe King Room' )
    from fuzzywuzzy import fuzz

    fuzz.ratio(‘Deluxe Room, 1 King Bed’, ‘Deluxe King Room’)

    from fuzzywuzzy import fuzz

    fuzz.ratio(‘Deluxe Room, 1 King Bed’, ‘Deluxe King Room’)

    返回结果时62,它告诉我们“Deluxe Room, 1 King Bed”和“Deluxe King Room”的相似度约62%。

    fuzz. ratio ( 'Traditional Double Room, 2 Double Beds' , 'Double Room with Two Double Beds' )
    fuzz. ratio ( 'Room, 2 Double Beds (19th to 25th Floors)' , 'Two Double Beds - Location Room (19th to 25th Floors)' )
    fuzz.ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds') fuzz.ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')
    fuzz.ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds')
    fuzz.ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')

    “Traditional Double Room, 2 Double Beds”和“Double Room with Two Double Beds”的相似度约69%。“Room, 2 Double Beds (19th to 25th Floors)”和“Two Double Beds — Location Room (19th to 25th Floors)”相似度约74%。显然效果不怎么样。事实证明,简单的方法对于词序,缺失或多余词语以及其他类似问题的微小差异太过敏感。

    partial_ratio,比较部分字符串的相似度

    我们仍在使用相同的数据对:

    fuzz. partial_ratio ( 'Deluxe Room, 1 King Bed' , 'Deluxe King Room' )
    fuzz. partial_ratio ( 'Traditional Double Room, 2 Double Beds' , 'Double Room with Two Double Beds' )
    fuzz. partial_ratio ( 'Room, 2 Double Beds (19th to 25th Floors)' , 'Two Double Beds - Location Room (19th to 25th Floors)' )
    fuzz.partial_ratio('Deluxe Room, 1 King Bed','Deluxe King Room') fuzz.partial_ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds') fuzz.partial_ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')
    fuzz.partial_ratio('Deluxe Room, 1 King Bed','Deluxe King Room')
    fuzz.partial_ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds')
    fuzz.partial_ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')

    返回依次69、83、63。对于我的数据集来说,比较部分字符串并不能带来更好的整体效果。让我们尝试下一个。

    token_sort_ratio,忽略单词顺序

    fuzz. token_sort_ratio ( 'Deluxe Room, 1 King Bed' , 'Deluxe King Room' )
    fuzz. token_sort_ratio ( 'Traditional Double Room, 2 Double Beds' , 'Double Room with Two Double Beds' )
    fuzz. token_sort_ratio ( 'Room, 2 Double Beds (19th to 25th Floors)' , 'Two Double Beds - Location Room (19th to 25th Floors)' )
    fuzz.token_sort_ratio('Deluxe Room, 1 King Bed','Deluxe King Room') fuzz.token_sort_ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds') fuzz.token_sort_ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')
    fuzz.token_sort_ratio('Deluxe Room, 1 King Bed','Deluxe King Room')
    fuzz.token_sort_ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds')
    fuzz.token_sort_ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')

    返回依次84、78、83。这是迄今为止最好的。

    token_set_ratio,去重子集匹配

    它与token_sort_ratio类似,但更加灵活。

    fuzz. token_set_ratio ( 'Deluxe Room, 1 King Bed' , 'Deluxe King Room' )
    fuzz. token_set_ratio ( 'Traditional Double Room, 2 Double Beds' , 'Double Room with Two Double Beds' )
    fuzz. token_set_ratio ( 'Room, 2 Double Beds (19th to 25th Floors)' , 'Two Double Beds - Location Room (19th to 25th Floors)' )
    fuzz.token_set_ratio('Deluxe Room, 1 King Bed','Deluxe King Room') fuzz.token_set_ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds') fuzz.token_set_ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')
    fuzz.token_set_ratio('Deluxe Room, 1 King Bed','Deluxe King Room')
    fuzz.token_set_ratio('Traditional Double Room, 2 Double Beds','Double Room with Two Double Beds')
    fuzz.token_set_ratio('Room, 2 Double Beds (19th to 25th Floors)','Two Double Beds - Location Room (19th to 25th Floors)')

    返回依次100、78、97。看来token_set_ratio最适合我的数据。根据这一发现,将token_set_ratio应用到整个数据集。

    def get_ratio ( row ) :
    name1 = row [ 'Expedia' ]
    name2 = row [ 'Booking.com' ]
    return fuzz. token_set_ratio ( name1, name2 )
    rated = df. apply ( get_ratio, axis= 1 )
    rated. head ( 10 )
    greater_than_70_percent = df [ rated > 70 ]
    greater_than_70_percent. count ()
    len ( greater_than_70_percent ) / len ( df )
    def get_ratio(row): name1 = row['Expedia'] name2 = row['Booking.com'] return fuzz.token_set_ratio(name1, name2)

    rated = df.apply(get_ratio, axis=1)
    rated.head(10)

    greater_than_70_percent = df[rated > 70]
    greater_than_70_percent.count()
    len(greater_than_70_percent) / len(df)

    def get_ratio(row):
    name1 = row[‘Expedia’]
    name2 = row[‘Booking.com’]
    return fuzz.token_set_ratio(name1, name2)

    rated = df.apply(get_ratio, axis=1)
    rated.head(10)

    greater_than_70_percent = df[rated > 70]
    greater_than_70_percent.count()
    len(greater_than_70_percent) / len(df)

    当设定相似度> 70时,超过90%的房间对超过这个匹配分数。还很不错!上面只是做了2个文本间的相似度比较,如果存在多个如何处理?可以使用库中提供的 Process类:

    用来返回模糊匹配的字符串和相似度。

    >>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
    >>> process.extract("new york jets", choices, limit=2)
    [('New York Jets', 100), ('New York Giants', 78)]
    >>> process.extractOne("cowboys", choices)
    ("Dallas Cowboys", 90)
    >>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"] >>> process.extract("new york jets", choices, limit=2) [('New York Jets', 100), ('New York Giants', 78)] >>> process.extractOne("cowboys", choices) ("Dallas Cowboys", 90)
    >>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
        >>> process.extract("new york jets", choices, limit=2)
            [('New York Jets', 100), ('New York Giants', 78)]
        >>> process.extractOne("cowboys", choices)
            ("Dallas Cowboys", 90)
    

    FuzzyWuzzy在中文场景下的使用

    FuzzyWuzzy支持对中文进行比较:

    from fuzzywuzzy import fuzz
    from fuzzywuzzy import process
    print ( fuzz. ratio ( "数据挖掘" , "数据挖掘工程师" ))
    title_list = [ "数据分析师" , "数据挖掘工程师" , "大数据开发工程师" , "机器学习工程师" ,
    "算法工程师" , "数据库管理" , "商业分析师" , "数据科学家" , "首席数据官" ,
    "数据产品经理" , "数据运营" , "大数据架构师" ]
    print ( process. extractOne ( "数据挖掘" , title_list ))
    from fuzzywuzzy import fuzz from fuzzywuzzy import process

    print(fuzz.ratio(“数据挖掘”, “数据挖掘工程师”))

    title_list = [“数据分析师”, “数据挖掘工程师”, “大数据开发工程师”, “机器学习工程师”,
    “算法工程师”, “数据库管理”, “商业分析师”, “数据科学家”, “首席数据官”,
    “数据产品经理”, “数据运营”, “大数据架构师”]

    print(process.extractOne(“数据挖掘”, title_list))

    from fuzzywuzzy import fuzz
    from fuzzywuzzy import process

    print(fuzz.ratio(“数据挖掘”, “数据挖掘工程师”))

    title_list = [“数据分析师”, “数据挖掘工程师”, “大数据开发工程师”, “机器学习工程师”,
    “算法工程师”, “数据库管理”, “商业分析师”, “数据科学家”, “首席数据官”,
    “数据产品经理”, “数据运营”, “大数据架构师”]

    print(process.extractOne(“数据挖掘”, title_list))

    仔细查看代码,还是存在的问题:

    • FuzzWuzzy并不会针对中文进行分词
    • 也没有对中文的一些停用词进行过滤

    改进方案,处理前进行中文处理:

    • 繁简转换
    • 中文分词
    • 去除停用词

    参考链接:

    展开全文
  • 今天小编就为大家分享一篇python正则表达式匹配不包含某几个字符的字符串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。这篇文章主要介绍了python字符串匹配数字的正则表达式 ,需要的朋友可以参考下
  • 主要介绍了Python使用中文正则表达式匹配指定中文字符串的方法,结合实例形式分析了Python正则匹配及字符编码相关操作技巧,需要的朋友可以参考下
  • python 字符串匹配与查找

    千次阅读 2020-11-29 10:20:21
    第一次可能是技术的学习,那么从第二次开始,就开始是大量的体力劳动,遵循凡事重复的体力劳动,都交给python的原则,我们可以利用python把我们需要的字符串都找出来,避免纯手工操作。1、正则表达式正则表达式,...

    在日常工作中,尤其是根据日志定位,我们常常需要手动搜索大量的关键字符串,进行问题定位。第一次可能是技术的学习,那么从第二次开始,就开始是大量的体力劳动,遵循凡事重复的体力劳动,都交给python的原则,我们可以利用python把我们需要的字符串都找出来,避免纯手工操作。

    1、正则表达式

    正则表达式,几乎是计算机领域绕不过去的一种手段了,毕竟机器并不是人,比如人看到100-109这些自然会认为是数值。并且满足:

    1)它是三位数。

    2)它大于等于100,并且小于等于109。

    但是在机器的眼里,它并没有这些意义,如果从存储的角度看,所有的在计算机的内容都是二进制的1和0。之所以我们能在文本里面看到100,101,102,...,109。是因为我们将这些二进制进行了再翻译,这种过程叫做编码。

    所以如何让程序知道,你要找的是东西呢?

    比如说上面的例子,我们要找的100-109这个范围的数值,一种最简单的方法是把这10个数每次遍历一遍文本找到,但是当我们扩大范围呢10000-99999,找的这个范围内的数值,每个数字都进行遍历显然是不太现实的。

    这时我们可以用正则定义一个规则“\d\d\d”,它告诉计算机,我们要寻找一个三位数字的字符串。但是这样的三位数是很多的,如何找的100到109范围内的整数呢。可以观察到100到109,它们的第一位数都是1,第二位是0,第三位则是取0-9任意值。于是我们只要限定这三位的取值,就可以找的对应的字符串了----》“10[0-9]”

    [0-9]就是一种通配符的表达,它表示这里可以取0-9的任意值。

    事实上正则表达式远没有这么简单,确切的说,它因为不同需求,复杂程度也是不同的。学习正则表达式,可以参考下面链接的资料:

    2、python的re 模块

    re是python内嵌的,用于匹配正则表达式的模块,因此,可以直接引用re的模块来运用正则表达式查询我们想要的内容。

    re模块内部集成了很多方法,这里只简单介绍几种比较常用的方法。

    1)findall

    re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

    格式:

    re.findall(pattern, string, flags=0)

    pattern: 编译时用的表达式字符串。

    flags 编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:

    例如我们要找的字符串中的102。

    运行结果:

    2)compile

    编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)

    格式:

    re.compile(pattern,flags=0)

    那么上面的例子,我们还可以这么写:

    re还提供了很多方法用于更方便的查找字符串,这里不再一一详细叙述。

    好了,我们现在实现这样一个小项目,工作中,你的领导需要你将日志log.log中所有101-109的数值,查找出来。那么你应该怎么做呢?

    1)正则表达式可以用“10[0-9]”表示

    2)利用re把log.log中满足要求的内容查找出来。

    log.log内容如下:

    简化代码如下:

    运行结果如图:

    正则+python 可以帮助你实现更多有趣的内容。查找匹配字符串的技能几乎在python中无处不在,这将有助于你更好的用python帮助自己解决问题,从繁复的体力查找中抽出时间,进行更有意义的思考。

    展开全文
  • 需要说明的是,TheFuzz是FuzzyWuzzy的升级版本,后者在2020年后已经不再进行更新,所以请及时切换到TheFuzz库。 1. 安装方法 2. 两大模块fuzz和process 2.1 模块一:fuzz 2.2 模块二:process 2.2.1 process....
  • Python实现字符串模糊匹配

    千次阅读 2021-12-09 09:48:37
    · x:被匹配字符串。 · words:去匹配字符串列表。 · n,前topn个最佳匹配返回,默认为3。 · cutoff:匹配度大小,为[0, 1]浮点数,默认数值0.6。 import difflib list1 = ['ape', 'apple', 'peach', ...
  • python正则表达式如何匹配字符串

    万次阅读 2021-02-10 12:10:57
    python正则表达式匹配字符串的方法:1、使用【(.+?)】这个正则表达式来提取单个位置的字符串;2、使用【(?P…)】这个正则表达式【匹配连续多个位置的字符串python正则表达式匹配字符串的方法:一、单个位置的字符...
  • 主要介绍了python使用正则表达式匹配字符串开头并打印的方法,结合实例形式分析了Python基于正则表达式操作字符串的相关技巧,需要的朋友可以参考下
  • Python字符串开头或末尾匹配

    千次阅读 2020-12-03 12:40:49
    当你需要通过指定的文本模式去检查字符串的开头或者结尾的时候,比如文件名后缀,URL Scheme等等。检查字符串开头或结尾的一个简单方法是使用str.startswith()或者是str.endswith()方法, 案例如下: >>> py...
  • 本文实例讲述了python实现查找两个字符串中相同字符并输出的方法。... 您可能感兴趣的文章:python实现在字符串中查找子字符串的方法python判断字符串是否包含子字符串的方法python无限生成不重复(字母,数
  • Python中的模糊字符串匹配

    千次阅读 2020-12-02 16:24:53
    预处理:在第一个过程中对列表进行排序,为每个字符串创建一个输出映射,映射的键可以是规范化的字符串。规范化可能包括:小写转换没有空格,删除特殊字符如果可能,将unicode转换为ascii等效值,请使用unicodedata....
  • Python字符匹配

    千次阅读 2021-06-19 22:48:17
    今天我们来聊一下Python中字符的匹配。所谓匹配字符串,即按指定规则提取数据,主要用于爬虫和数据清洗。...1.直接字符串匹配 2.任意字匹配 3.范围匹配 4.数字匹配\d 5.非数字匹配 6.字母\w(汉字,字母...
  • 问题匹配或者搜索特定模式的文本解决方案如果需要匹配的是字面字符串,只需要调用基本字符串方法就行, 比如 str.find()、str.endswith()、str.startswith() 或者类似的方法。对于复杂的匹配需要使用正则表达式和 re...
  • python 中如何匹配字符串

    千次阅读 2021-02-03 02:50:57
    python 中如何匹配字符串?1. re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。importreline="thishdr-biz123modelserver456"pattern=r"123"matchObj=re.match...
  • 文章目录需求:单次匹配字符串`match()` 函数`search()` 函数`fullmatch()` 函数需求:全文搜索替换字符...python 中的 match() ,需要这个字符串以这个正则表达式开头,【检验字符串开头有没有正确】。如果字符串开头

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 178,816
精华内容 71,526
关键字:

python字符串部分匹配