【问题标题】:Regex to find exact match based on middle of a string正则表达式根据字符串中间查找完全匹配
【发布时间】:2019-12-01 17:45:40
【问题描述】:

尝试根据日期之前的字符串归档单个文件。文件命名如下; 都以 DHT.BENT.RSEC.ETNS* 开头,然后是标识符 .DHT 或 *BNT,然后是 timestamp.TXT

DHT.BENT.RSEC.ETNS.DHT.2019-07-22-210004.TXT
DHT.BENT.RSEC.ETNS.BNT.2019-04-23-190824.TXT

尝试如下

/(?:DHT\.BENT\.RSEC\.ETNS\.DHT)(?:.*).TXT/
/(?:DHT\.BENT\.RSEC\.ETNS\.BNT)(?:.*).TXT/

我希望每个人都能在全字符串匹配时给我单独的代码行

DHT.BENT.RSEC.ETNS.DHT.2019-07-22-210004.TXT
DHT.BENT.RSEC.ETNS.BNT.2019-04-23-190824.TXT

。需要帮助来改进正则表达式

【问题讨论】:

  • 我假设您想要捕获第二组,但您使用?: 将其设置为非捕获。您希望第二组为(.*)
  • 请提供一个显示问题的最小可运行示例
  • 我不明白你想让你的正则表达式为你做什么。您想准确匹配和/或提取字符串的哪一部分?
  • 正则表达式都有效。问题出在程序的其他地方。
  • 我正在尝试匹配 DHT.BENT.RSEC.ETNS.DHT.2019-07-22-210004.TXT 完全匹配但必须有中间 (DNT) 或应该是第一个匹配此特定字符串并返回完整匹配的组 (DHT.BENT.RSEC.ETNS.DHT.2019-07-22-210004.TXT

标签: regex shell perl


【解决方案1】:

你的表达似乎还不错,如果可以的话,也许我们会包括更多的约束,例如:

^(?:DHT\.BENT\.RSEC\.ETNS\.DHT)\.\d{4}-\d{1,2}-\d{1,2}-\d+\.TXT$

DEMO 1

或者:

^(?:DHT\.BENT\.RSEC\.ETNS\.BNT)\.\d{4}-\d{1,2}-\d{1,2}-\d+\.TXT$

DEMO 2

表达式在regex101.com 的右上角进行了解释,如果您想探索/简化/修改它,在this link 中,您可以查看它如何与一些示例输入进行匹配,如果您愿意的话。

正则表达式电路

jex.im 可视化正则表达式:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多