首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配相似但不相同的字符串

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

Stack Overflow用户
提问于 2018-08-03 20:19:52
回答 1查看 263关注 0票数 2

我有两个csv,一个有大量的文本,另一个有注释/字符串。我想在文本中找到注释的位置。问题是,一些注释有额外的空间/字符,而这些字符不在文本中。由于需要精确的位置,我无法从原始文本中修剪空格/字符。我开始使用regex,但似乎没有办法搜索部分匹配。

示例

代码语言:javascript
复制
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'

代码语言:javascript
复制
 m = re.search(seg, text, re.M | re.DOTALL | re.I) 

这是大约15%的缝纫。

代码语言:javascript
复制
m = re.match(r'(water).*(treatment)$', text, re.M) 

这是行不通的,我认为这是可能的匹配第一和最后的话,并得到他们的立场,但这有许多问题,如多次发生的‘水’。

代码语言:javascript
复制
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?模型应用于一个快速成长的澳大利亚乡镇(Hopetoun)。

来自Seg

将SIDM模型应用于一个快速成长的澳大利亚乡镇(Hopetoun)。

来自文本的

\n nSIDM?用于设计和评估工具。作为一种设计工具,它(1)指导\n可持续基础设施解决方案的设计;(2)可用作评估项目完成程度的进度检查;(3)突出现有信息集中的差距;(4)essen-\n提供推进设计进程所需的工作范围。作为一种评估工具,它既可以作为快速诊断工具,也可以检查解决方案是否存在重大缺陷或普遍接受\n作为一个详细的评估工具,在这个工具中,可以详细比较各种选项,以便建立首选解决方案。

来自Seg

SIDM将用作设计和评估工具。作为一种设计工具,它(一)指导可持续基础设施解决方案的设计;(二)可用作评估项目完成程度的进度检查;(三)突出现有信息集中的空白;(四)埃森-很好地提供推进设计过程所需的工作范围。作为一种评价工具,它既可以作为一种快速诊断工具,也可以检查一个解决方案是否存在重大缺陷或普遍可以接受,也可以作为一个详细的评价工具,在该工具中可以详细比较各种备选方案,以便建立一个优选的解决方案。

在匹配之前要分段的子部分列表:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 17:21:05

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51679605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档