匹配相似但不相同的字符串

时间:2018-08-03 20:19:52

标签: python regex python-3.x

我有两个csv。一个带有大量文本,另一个带有注释/字符串。我想在文本中找到注释的位置。问题是某些注释中的多余空格/字符不在文本中。由于我需要准确的位置,因此无法从原始文本中剪裁空格/字符。我开始使用正则表达式,但似乎无法搜索部分匹配项。

示例

text = ' K. Meney & L. Pantelic, Int. J. Sus. Dev. Plann. Vol. 10, No. 4 (2015) 544?561\n? 2015 WIT Press, www.witpress.com\nISSN: 1743-7601 (paper format), ISSN: 1743-761X (online), http://www.witpress.com/journals\nDOI: 10.2495/SDP-V10-N4-544-561\nNOVEL DECISION MODEL FOR DELIVERING SUSTAINABLE \nINFRASTRUCTURE SOLUTIONS ? AN AUSTRALIAN  \nCASE STUDY\nK. MENEY & L. PANTELIC\nSyrinx Environmental PL, Australia.\nABSTRACT\nConventional approaches to water supply and wastewater treatment in regional towns globally are failing \ndue to population growth and resource pressure, combined with prohibitive costs of infrastructure upgrades.  '


seg = 'water  supply and wastewater  ¿treatment'


 m = re.search(seg, text, re.M | re.DOTALL | re.I) 

这大约匹配15%的段

m = re.match(r'(water).*(treatment)$', text, re.M) 

这是行不通的,我认为可以匹配第一个和最后一个单词并获得它们的位置,但这有很多问题,例如多次出现“水”

with open(file_path) as file, \
            mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
                if s.find(seg) != -1:
                    print('true')

出于某种原因,我对此一无所获。
我是否在其中任何一条上都走对了路?还是有更好的方法来做到这一点?

其他示例

来自文本
SIDM?模型应用于快速发展的\ ning澳大利亚乡镇(Hopetoun)

来自Seg
SIDM模型已应用于快速发展的澳大利亚乡镇(Hopetoun)

来自文本
\ nSIDM?旨在同时用作设计和评估工具。作为设计工具,它i)指导\ n可持续基础设施解决方案的设计,ii)可以用作进度检查以评估\ n项目的完成水平,iii)突出现有信息集中的差距,并且iv)本质上提供了推进设计过程所需的工作范围。作为评估工具,它既可以用作快速诊断工具,可以检查解决方案是否存在重大缺陷,或者通常可以接受,也可以作为详细的评估工具,在其中可以详细比较各种选项以建立解决方案。首选解决方案。

来自Seg
SIDM旨在同时用作设计和评估工具。作为一种设计工具,它i)指导可持续基础设施解决方案的设计,ii)可用作进度检查以评估项目的完成水平,iii)突出现有信息集中的差距,iv)初步提供了推进设计过程所需的工作范围。作为评估工具,它既可以用作快速诊断工具,检查解决方案是否存在重大缺陷还是可以普遍接受,又可以用作详细的评估工具,可以详细比较各种选择以建立首选解决方案。

匹配之前要细分的子列表:

seg = re.sub(r'\(', r'\\(', seg ) #Need to escape paraenthesis due to regex
seg = re.sub(r'\)', r'\\)', seg )
seg = re.sub(r'\?', r' ', seg )
seg = re.sub(r'[^\x00-\x7F]+',' ', seg)
seg = re.sub(r'\s+', ' ', seg)
seg = re.sub(r'\\r', ' ', seg)

1 个答案:

答案 0 :(得分:0)

正如casimirethippolyte指出的那样,patseg = re.sub(r'\ W +','\ W +',seg)为我解决了这个问题。