【问题标题】:Regex to match "<seven digits> - <filename>" with only one set of seven digits正则表达式匹配“<七位数字> - <文件名>”只有一组七位数字
【发布时间】:2017-12-15 21:32:20
【问题描述】:

我一直在尝试编写一个正则表达式,它将匹配一个文件名,该文件名附加一个七位数的数字标识符,后跟一个连字符,例如1234567 - filename.pdf

文件名可以是任何文件名有效字符的集合。

到目前为止,我有正则表达式^[0-9]{7} - .*,它与字符串匹配,但它也与7654321 - 1234567 - filename.pdf3214567 - 7654321 - 1234567 - filename.pdf 等匹配。

是否有一个正则表达式只匹配带有一组数字和一个连字符的字符串?类似^[0-9]{7} -{1} .*

【问题讨论】:

  • 可能是^[0-9]{7} - (?![0-9]{7} - ).*?如果空格数量是任意的,它就不起作用了。
  • 连字符前后只能有一个空格。介意解释一下这是做什么的吗?它是否确保 7 位字符串后面的不是另一个 7 位字符串?
  • the regex demo。一旦在前 7 位数字、空格、-、空格之后找到 7 位数字、空格、- 和空格,(?![0-9]{7} - ) 将失败。
  • 太棒了,谢谢!我怀疑会有任何文件名具有相同的 7 位/空格/连字符/空格格式。

标签: regex powershell


【解决方案1】:

您可以添加一个否定的前瞻:

^[0-9]{7} - (?![0-9]{7} - ).* 
            ^^^^^^^^^^^^^^^

请参阅regex demo

详情

  • ^ - 字符串开头
  • [0-9]{7} - 7 位数字
  • - - 空格,-,空格
  • (?![0-9]{7} - ) - 如果有 7 位数字、空格、- 和紧靠当前位置右侧的空格,则表示匹配失败
  • .* - 任何 0+ 个字符,尽可能多

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多