正则表达式-每隔n个(固定)字符查找另一个字符串中出现的字符串

时间:2019-03-08 06:43:22

标签: python regex

我的问题标题可能不清楚,因此我将尝试通过一些示例进行解释以更好地解释

我才刚刚开始使用正则表达式,并且想用它来匹配每n个字符中另一个字符串中出现(隐藏)的字符串,例如:

我们要在此字符串中找到世界“ hello”:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) {

    // build the root 
    var configRoot = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false)
        // ...
        .Build();

    var builder = new WebHostBuilder();
    return builder
        // reuse the configRoot
        .UseConfiguration(configRoot)
        // register the configRoot as a singleton service
        .ConfigureServices(services =>{
            services.AddSingleton<IConfigurationRoot>(configRoot);
        })
        .UseStartup<Startup>()
        .ConfigureLogging(logging => {   
            //override configuration in NLog.config
            logging.ClearProviders();
            logging.SetMinimumLevel(LogLevel.Trace);
        })
        .UseKestrel();
}

注意它如何每2个字符重复一次

我能够为此创建一个简单的正则表达式规则:

"h..e..l..l..o......"

但是此方法每2步只能使用一次,但我希望它能执行任意数量的步长(或至少说5步),这样它也可以匹配以下字符串:

"h.{2}e.{2}l.{2}l.{2}o"

我尝试过的事情:

"h...e...l...l...o"

但是,这不能在所有范围内固定数字,因此,即使该字符串未按固定间隔出现,该字符串仍会通过:

"h.{1,5}e.{1,5}l.{1,5}l.{1,5}o"

请注意2个l之间的单个字符。我在这里的唯一另一个想法是使用循环说出1到5并尝试将所有这些作为单独的regex语句进行尝试,但是想尝试在这里询问是否有任何整齐的方法可以使用regex进行操作: )

谢谢您的回复

2 个答案:

答案 0 :(得分:3)

我建议为此使用捕获组和后向引用

h(\.{1,5})e\1l\1l\1o

RegEx Demo

第一个字母(\.{1,5})之后的h将匹配1到5个点,并捕获在组#1中。之后,我们在每个字符之间使用反向引用#1,即\1,以确保我们在所有字母之间匹配相同数量的点。

答案 1 :(得分:0)

如果您只想从文本中提取字母,并且它是一个单词,请尝试''.join(re.findall(r"[a-zA-Z]",text))