regex 正则表达式查找单词中任何地方的相同辅音,而不仅仅是连续的[重复]

sg3maiej  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(79)

此问题已在此处有答案

Regular expression to match an exact number of occurrence for a certain character(4个答案)
18天前关闭
什么是正则表达式,它可以在文本语料库中找到多少个单词有相同的辅音出现超过四次?例如,德语单词Sonnentrunkenheiten有6个n。
这个正则表达式([b-df-hj-np-tv-z])\1{3,}只显示了四个连续的辅音。

ef1yzkbh

ef1yzkbh1#

如果你正在使用Python,你真的不需要正则表达式。但在这里

r'([b-df-hj-np-tv-xz])(\w*?\1){3,}'

一个更好的解决方案是使用Counter,并打印所有出现三次以上的辅音(因此“kankeudenkaankohan”中的“n”和“k”)

sbtkgmzw

sbtkgmzw2#

你只需要添加一个词来匹配单词的其他部分,在一个\1的组中。为了方便起见,我在这里使用.*。我将使它成为一个非捕获组,因为没有必要捕获最后一个事件。

([b-df-hj-np-tv-z])(?:.*\1){3,}

Try it online on regex101
示例匹配:

Sonnentrunkenheiten
assess

也匹配(由于.*而不是更精确的东西):

Acca Dacca
rfbsl7qr

rfbsl7qr3#

  • "....."*

为了匹配一个词,你可以用下面的。

([^aeiouy])(?:.*?\1){3}

尽管如此,我还是建议使用 for-loop 来解析值。
下面是一个单词的例子。

import re
s = 'Sonnentrunkenheiten'
v = 'aeiouy'
m = {x: 0 for x in set(s) if x not in v}
for c in s:
    if c not in v:
        m[c] += 1

输出

{'t': 2, 'r': 1, 'h': 1, 'S': 1, 'n': 6, 'k': 1}

这里有一个句子的例子。

s = 'Lorem ipsum dolor sit amet'
v = 'aeiouy'
for w in s.split():
    m = {x: 0 for x in set(w) if x not in v}
    for c in w:
        if c not in v:
            m[c] += 1
    print(f"'{w}'")
    print(m)

输出

'Lorem'
{'r': 1, 'L': 1, 'm': 1}
'ipsum'
{'s': 1, 'p': 1, 'm': 1}
'dolor'
{'d': 1, 'r': 1, 'l': 1}
'sit'
{'t': 1, 's': 1}
'amet'
{'t': 1, 'm': 1}

从这里开始,只需编写一个 * 方法 * 来返回计数。

v = 'aeiouy'
def f(s):
    z = 0
    for w in s.split():
        m = {x: 0 for x in set(w) if x not in v}
        for c in w:
            if c not in v: m[c] += 1
        if sorted(m.values())[-1] >= 4: z += 1
    return z
fumotvh3

fumotvh34#

求反re.findall中的辅音,并计算结果列表的长度

s = "Sonnentrunkenheiten"

def f(st, char = 'n'):
    return len([x for x in re.findall(r'[^aeiouy]',s) if x == char])

print(f(s))

6

相关问题