【问题标题】:Check for underscore wrapped any valid Windows filename characters except underscore and csv extension检查下划线是否包含任何有效的 Windows 文件名字符,下划线和 csv 扩展名除外
【发布时间】:2014-04-22 18:43:03
【问题描述】:

我对正则表达式还是很陌生,所以我想我可以确定一个字符串是否以不区分大小写的.csv结尾:

(\\.(?i)(csv))

但是,我不知道如何检查之前的所有内容是否至少是一个有效的 Windows 文件名字符(下划线除外)、一个下划线和至少一个有效的 Windows 文件名字符(下划线除外)。

如何做到这一点?

【问题讨论】:

    标签: java regex windows filenames file-extension


    【解决方案1】:

    尝试使用此正则表达式作为初学者:[\\dA-Za-z]+_[\\dA-Za-z]+(\\.(?i)(csv))。

    它占用了您检查.csv 的部分,并在其前面添加了更多内容。它可以分解成更小的部分:

    1. [\\dA-Za-z]+:任何数字 (\d),不区分大小写。至少一个 (+),可能更多。
    2. _: 正好一个下划线
    3. [\\dA-Za-z]+:任何数字,不区分大小写。至少一个 (+),可能更多。
    4. (\\.(?i)(csv)):您已经存在的.csv 支票。

    【讨论】:

    • 非常感谢您的额外工作!就我而言,我可以强制用户只使用字母数字。再次,非常感谢!
    • 仅作记录,there seem to be some reserved chars for filenames that you CANNOT use。我认为仅使用简单的字母数字是一个安全的选择。另外:正则表达式中的额外括号,如果您不需要专门在组中捕获事物,我建议删除它们,因为它们会减慢正则表达式的速度。我认为您唯一需要的是(?i)。
    • 大声笑,很抱歉。结果不正确。是反斜杠。感谢您这么快回复我!
    • 哦,对不起。这是一个java 标记的帖子,我没有意识到。我通常在 Rubular.com 上对 SO 进行所有正则表达式测试,这是一个轻量级的 Ruby 测试(非常简单和干净)。当我粘贴正则表达式时,我没有正确转义字符。在正则表达式中,使用反斜杠来转义特殊字符,例如 \d 用于数字。在 Java 中,您必须转义转义,以便 Java 将其读取为 \d,而不是看到 Java 反斜杠并在之后寻找 Java 特殊字符串 char。对于所有反斜杠,使用额外的反斜杠(例如\\d)......应该可以解决问题。我将编辑答案以反映这一点。
    猜你喜欢
    • 2016-12-05
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多