Python 在正则表达式中将 f 字符串与 r 字符串和大括号组合

Akb*_*ein 4 python regex python-3.x

给定一个单词 (x);返回可以在该单词中找到的可能的 n 元语法。您可以根据需要修改n-gram值;它位于 pat 变量的花括号中。默认 n 元语法值为 4。

例如; 对于单词 (x): x = 'abcdef' 可能的 4-gram 是:

['abcd', 'bcde', 'cdef']

def ngram_finder(x):
    pat = r'(?=(\S{4}))'
    xx = re.findall(pat, x)
    return xx
Run Code Online (Sandbox Code Playgroud)

问题是:如何使用大括号将 f 字符串与正则表达式中的 r 字符串组合起来。

Nic*_*ick 8

您可以使用此字符串将值组合n到正则表达式中,并使用双大括号在输出中创建单个值:

fr'(?=(\S{{{n}}}))'
Run Code Online (Sandbox Code Playgroud)

正则表达式需要{}创建一个量词(正如您在原始 regex 中所做的那样{4})。但是,f字符串用于{}指示表达式替换,因此您需要“转义” {}f 字符串中正则表达式所需的内容。这是通过使用{{and}}在输出中创建{and来完成的}。所以{{{n}}}( 其中n=4) 生成'{' + '4' + '}' = '{4}' )按要求

完整代码:

import re

def ngram_finder(x, n):
    pat = fr'(?=(\S{{{n}}}))'
    return re.findall(pat, x)
    
x = 'abcdef'
print(ngram_finder(x, 4))
print(ngram_finder(x, 5))
Run Code Online (Sandbox Code Playgroud)

输出:

['abcd', 'bcde', 'cdef']
['abcde', 'bcdef']
Run Code Online (Sandbox Code Playgroud)