努力将正则表达式与我的字符串匹配

Posted

技术标签:

【中文标题】努力将正则表达式与我的字符串匹配【英文标题】:Struggling to match exact regex to my strings 【发布时间】:2021-10-09 10:51:55 【问题描述】:

我有这些字符串

string1 = CD.TR.DRC/TF8
string2 = CD.TR.DRC/TF8/A8
string3 = CD.TR.DRC/TF8.PB
string4 = DRC/TF8
string5 = DDRC/TF8

我正在尝试完全匹配正则表达式DRC/TF8。所以我想要的只是string1string3string4 返回true。有人可以建议我如何使用正则表达式获得它吗?

【问题讨论】:

"我正在尝试完全匹配正则表达式 DRC/TF8" -> 但 string1string3 不完全匹配。你能说得更具体点吗? 每个人都在讨论正则表达式,但是当在另一个字符串中找到特定字符串时,我看到一个问题要求true... 为什么是正则表达式? string.Contains() 有什么问题? (还有为什么字符串是 1/2/4 而不是 3,它还包含您要查找的值?) 好点。但是string.Contains("DRC/TF8") 不也匹配string5 【参考方案1】:

我会说这会起作用:

\bDRC\/TF8(?=\.|$)

\bbinds the whole word (?=\.|$) 是 negative lookahead,它断言单词以 .或者是行尾

查看示例:https://regexr.com/634a3

C#的详细语法可以在this post找到。

【讨论】:

(?=\.|$) 真的有必要吗? \b 似乎足够了,如果不是,那么您可以放弃\b 是的我猜,否则它也需要string2 哦,对了,谢谢你的回复。但是,(?=\.|$) 之前的 \b 就不再需要了。 嗯,你可能是对的。如有必要,将检查并更新我的答案【参考方案2】:

根据您当前的示例,您可以使用此模式:(?<=\.|^)DRC\/TF8(?=\.|$)

代码:

using System;
using System.Text.RegularExpressions;

public class Test
    public static void Main()
        string pattern = @"(?<=\.|^)DRC\/TF8(?=\.|$)";  
        Regex re = new Regex(pattern);  
        string[] text = "CD.TR.DRC/TF8", "CD.TR.DRC/TF8/A8", "CD.TR.DRC/TF8.PB", "DRC/TF8", "DDRC/TF8";
        foreach(string str in text)
            if (re.IsMatch(str))
                Console.WriteLine(str);
            
        
    

输出:

CD.TR.DRC/TF8
CD.TR.DRC/TF8.PB
DRC/TF8

【讨论】:

问题中的示例不太可能详尽无遗。

以上是关于努力将正则表达式与我的字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

在Java中的正则表达式匹配后删除部分字符串

用Python中的正则表达式匹配日期?

否定字符类中的单引号

匹配失败的匹配字符串中的正则表达式索引

正则表达式模式匹配第一个和最后一个标记之间的单词,第一个单词是常量

如何编写正则表达式模式来获取匹配的字符串?