匹配字符串后跟另一个字符串

Posted

技术标签:

【中文标题】匹配字符串后跟另一个字符串【英文标题】:Match string followed by another string 【发布时间】:2021-08-17 01:49:59 【问题描述】:

我有一个正则表达式新手问题。 我正在尝试在字符串中进行不区分大小写的搜索。我需要搜索 cgif 后跟任何文本并以 .txt 结尾,但下面的代码不起作用。我错过了什么?

using System;   
using System.Text.RegularExpressions;

public class Program

    public static void Main()
    
        var rx = new Regex("(cgif)+(.txt)+^", RegexOptions.Compiled | RegexOptions.IgnoreCase);
        bool x1=rx.IsMatch("abc\\cgif123.txt");
        Console.WriteLine($"x1");<=should return true
        
        bool x2=rx.IsMatch("abc\\cgif.txt");
        Console.WriteLine($"x2");<=should return true
        
        bool x3=rx.IsMatch("abc\\cgif.txtabc");
        Console.WriteLine($"x3");<=should return false
    

【问题讨论】:

您学习了哪些正则表达式教程?将@"cgif.*\.txt$"| RegexOptions.Singleline 一起使用 【参考方案1】:

你应该使用

var rx = new Regex(@"cgif.*\.txt$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);

注意事项:

RegexOptions.Singleline - 将使 . 也匹配换行符、LF、字符 cgif.*\.txt$ 匹配 cgif,然后是尽可能多的任意零个或多个字符,然后是字符串末尾的 .txt

这是demo showing how this regex works。此外,请参阅 online C# demo 产生 True, True, False 预期。

【讨论】:

@Joel \[.] 匹配 [,然后是任何字符,然后是 ]。要匹配一个点,需要\. 您可能还想在 RegexOptions 中添加不区分大小写以使其完整

以上是关于匹配字符串后跟另一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配字符串后跟任何内容或以非数字字符结尾的字符串

使用awk,后跟单引号时如何匹配反斜杠字符(是的,这是两个字符)

正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF

带有 0 或 1 的正则表达式数字 - 后跟数字

正则表达式匹配所有字符实例,除非后跟数字或单独

如何匹配而不是捕获正则表达式的一部分?