【问题标题】:Regular expression - filename with multiple periods正则表达式 - 带有多个句点的文件名
【发布时间】:2013-06-12 01:20:53
【问题描述】:

考虑以下命令行:tfile -a -fn P2324_234.w07 -tc 8811

解析这个的正则表达式:-\w+|\w+\s|\w+\.+\w+\s(见下面的截图)

问题是当文件名有多个点时,比如:tfile -a -fn P23.24.23.4.w07 -tc 8811

问题:如何确保P23.24.23.4.w07 被解析为一个参数(如P23.24.23.4.w07)?

【问题讨论】:

  • 阅读here。它基本上归结为同样的问题。此外,您可能希望使用支持您实际使用的风格的在线测试器:regexplanet.com
  • 你想获取命令行的哪一部分?

标签: java regex parsing


【解决方案1】:

描述一下!

For: P23.24.23.4.w07
use: \w+(?:\.\w+)+

请注意,对于您的 java 版本,您可以使用 possessive quantifiersatomic groups

\\w++(?>\\.\\w++)+

【讨论】:

  • 但这是一个邪恶的正则表达式。见stackoverflow.com/questions/12841970/…
  • @AJMansfield 不,不是。 \w. 之间没有重叠,这使得它非常安全。这称为“展开循环”,是 效率技术之一。请参阅我对该问题的评论中的链接。
  • @AJMansfield (a+)+ 可能是灾难性回溯的来源,但 (ab+)+ 并没有那么危险。 +1 米布特纳。
【解决方案2】:

使用字符类,例如/-fn [a-z0-9.]+ -tc/i。在英语中,这意味着“-fn,后跟a-z0-9. 之间的一个或多个字符,后跟-tc。”如果要捕获该部分,请将该部分括在括号中。

【讨论】:

  • 您可能还应该包括下划线,然后这意味着[\w.]
【解决方案3】:

我用过这个 -\w+|\w+\s|\S+.+\w+\s

我们可以使用'not space'来代替'word',你没有指定你的额外要求,所以我认为这很好。

【讨论】:

    【解决方案4】:

    使用量词:

    -\w+|\w+\s|(?:\w+\.+)+\w+\s
               ^^^      ^^
    

    您也可以简单地表达为:

    -?\w+\s?|(?:\w+\.+)+\w+\s
    

    【讨论】:

      【解决方案5】:

      为了在 java 中执行此操作,您需要做的就是将其沿空格拆分,不需要正则表达式。好的oleString.split()应该可以搞定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-20
        • 2022-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多