相关疑难解决方法(0)

Python正则表达式找到所有重叠匹配?

我试图在Python 2.6中使用re在一系列更大的数字中找到每10个数字系列的数字.

我很容易就能抓住没有重叠的比赛,但我想要数字系列中的每场比赛.例如.

在"123456789123456789"

我应该得到以下列表:

[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]
Run Code Online (Sandbox Code Playgroud)

我发现了对"前瞻"的引用,但我看过的例子只显示了数字对而不是更大的分组,我无法将它们转换为超出两位数.

python regex overlapping

77
推荐指数
4
解决办法
5万
查看次数

计算两个字符串之间距离的算法

是否有任何字符串距离算法没有考虑到单词的顺序?

以下算法未提供所需结果(在该示例中,所需结果应为1):

import jaro
jaro.jaro_winkler_metric(u'Michael Jordan',u'Jordan Michael')
>>>0.47

import Levenshtein
Levenshtein.ratio('Michael Jordan', 'Jordan Michael')
>>>0.5

from difflib import SequenceMatcher
SequenceMatcher(None, 'Michael Jordan', 'Jordan Michael').ratio()
>>>0.5
Run Code Online (Sandbox Code Playgroud)

制作它的一种方法是按字母顺序排列字符串,然后使用上述算法:

''.join(sorted('Michael Jordan'))
>>>' JMaacdehilnor'

''.join(sorted('Jordan Michael'))
>>>' JMaacdehilnor'
Run Code Online (Sandbox Code Playgroud)

但是这里姓名和姓氏的信息丢失了,不会有"稳定"的结果.

我创建了一个使用permutationsfrom 的函数,itertools它接受所有可能的单词编译并比较字符串并输出最大值.结果令人满意,但是当我必须比较数百万个名字时,整个程序真的很慢.

可以做的其他事情是对单词进行排序,例如:

' '.join(sorted('Michael Jordan'.split()))
>>>'Jordan Michael'
' '.join(sorted('Jordan Michael'.split()))
>>>'Jordan Michael'
Run Code Online (Sandbox Code Playgroud)

似乎很好的方式和简单的方法来减少计算,但我们放松了一些敏感的情况.例:

name1 = ' '.join(sorted('Bizen Dim'.split()))
>>>'Bizen Dim'
name2 = ' '.join(sorted('Dim Mpizen'.split()))
>>>'Dim Mpizen'

SequenceMatcher(None, name1, name2).ratio()
>>>  0.55
Run Code Online (Sandbox Code Playgroud)

这两个名字是相同的,有些人将'他们的名字'从'b'翻译成'mp'(我就是其中之一).用这种方式我们就失去了这个'匹配'.

是否有任何字符串距离算法比较单词而不考虑单词的顺序?或者是否有建议如何有效地实现所需的功能?

python string levenshtein-distance

5
推荐指数
1
解决办法
1974
查看次数

如何在Python中使用正则表达式获取前导零的所有索引

在 Python 中使用正则表达式(库 re(仅)),我想创建一个函数,该函数给出字符串中所有前导 0 的位置。

例如,如果字符串是:我的房子有 01 个花园和 003 个房间。我希望函数返回 13、27 和 28。

我尝试过例如:

import re
string = "My house has 01 garden and 003 rooms."
pattern = "(0+)[1-9]\d*"

print(re.findall(pattern,string))
Run Code Online (Sandbox Code Playgroud)

显然,输出给了我匹配但没有位置......

python regex python-re

3
推荐指数
1
解决办法
86
查看次数

查找字符串中单词的位置

我的任务

我正在尝试使用正则表达式查找出现在字符串中的单词的位置

import re

# A random string

mystr = "there not what is jake can do for you ask what you play do for spare jake".upper() 

match = re.search(r"[^a-zA-Z](jake)[^a-zA-Z]", mystr)

print match.start(1)
Run Code Online (Sandbox Code Playgroud)

输出量

18
Run Code Online (Sandbox Code Playgroud)

预期产量

我希望我的输出包含字符串的位置jake

5, 17
Run Code Online (Sandbox Code Playgroud)

编辑:为了澄清,我正在尝试确定单词的位置。我相信我所做的就是找到索引,并且不确定如何使其按预期工作

python regex search python-2.7

2
推荐指数
1
解决办法
823
查看次数