【问题标题】:Regex in C# that contains "this" but not "thatC# 中的正则表达式包含“this”但不包含“that
【发布时间】:2011-05-23 02:45:44
【问题描述】:

我需要过滤文件列表。其中一些是 csv 文件,其中一些附加了控制标记“.cntl”。

示例:file1.csv、file1.csv.cntl

我想设置一个正则表达式来检查文件是否包含“csv”而不是“cntl”。现在我有这个了。

csv(?!cntl)

这不起作用。什么是合适的正则表达式?

PS。这都是在 C# 中完成的。

【问题讨论】:

    标签: c# regex regex-negation


    【解决方案1】:

    以下是你想要的模式。

    @"csv(?!\.cntl)"
    

    但是,检查不是更容易吗:

    if (string.EndsWith("cntl"))
    

    使用正则表达式不必要地复杂。

    【讨论】:

    • 我不认为@"csv!(?\.cntl)" 是一个有效的正则表达式。
    • @eldare,我也有同样的感觉,但我无法确定我认为哪里出了问题。你觉得哪里不对?
    • @jjnguy:负前瞻应该是(?!<expr>)。如果你移动 ! 应该没问题(快速测试似乎证实了这一点)。
    【解决方案2】:

    您的正则表达式应检查文件是否以 .csv 结尾

    \.csv$
    

    请记住,csv 可以包含在文件名的其他位置。

    【讨论】:

    • 很多不同的答案,但这非常简单。谢谢。
    • @Norla,我不得不说检查 string.EndsWith() 比一开始就使用正则表达式要简单得多。
    【解决方案3】:

    这应该可行:

    csv(?!.*cntl)

    【讨论】:

    • 如果你没有“。”是否有可能拥有一个不是“csv”真实文件的文件。 “Myfilecsv”将变为真
    • @sv88erik:是的,但这不是 OP 提出的问题。
    • "Example: file1.csv, file1.csv.cntl" : 如此语法所示:)
    • “我想设置一个正则表达式来检查文件是否包含 'csv' 而不是 'cntl'。”
    • 我认为这是 OP 的错,然后是 eksplene 和文件扩展名的文件验证。但是,当然,如果您选择按照自己的方式解释它,它会有两个不同的答案
    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多