【问题标题】:What do you understand by this RegEx?你对这个 RegEx 有什么理解?
【发布时间】:2021-03-04 19:42:52
【问题描述】:

我正在使用 VBA 并尝试将字符串拆分为三列,几乎所有字符串都类似于 Company Name 3567782 Agent Name.pdf

使用这种模式,我想匹配空格和数字之前的所有文本(第一组)、数字(第二组)以及空格之后和 .pdf 之前的所有文本(第三组)。

strPattern = "^(.+)\n(\d{4,10})\n(.+).pdf"

我记得python中的空格是\s,但在VBA中看到的是\n

你能帮我找到我正在寻找的正确模式吗?

【问题讨论】:

  • 我会看看我能想出什么,但你应该把你当前的正则表达式放入regex101.com。我发现该网站非常非常有帮助,不仅可以解释不同标记的含义,还可以帮助构建和测试正则表达式。输入正则表达式后,请查看说明部分的右上角。它将每个字符分解成它的含义。

标签: excel regex vba


【解决方案1】:

正如我在评论中所说,我使用https://regex101.com 网站。还有其他的,但我发现这个对我最有帮助。

当我输入你的正则表达式时

^(.+)\n(\d{4,10})\n(.+).pdf

和测试字符串

Company Name 3567782 Agent Name.pdf

我注意到的第一件事是正则表达式与测试字符串不匹配(见 MATCH INFORMATION 下的右侧)。

以下是我看到的几件事:

  1. \n 是换行符,而不是空格。在正则表达式中,空格是 " "。
  2. 您的最后一个“。”在“.pdf”中没有注册为文字句点,它是一个匹配任何字符的标记。要匹配文字句点,您需要 \.

如果我们更改这两件事,它会返回三个似乎与您正在寻找的匹配的组。

^(.+) (\d{4,10}) (.+)\.pdf

看起来像数字,您正在寻找 4 到 10 位数字。如果这是正确的,那么您的正则表达式看起来不错。您可以将一些示例字符串放入 TEST STRING 区域并确保它适用于所有情况。

【讨论】:

  • 谢谢,非常有用的页面。我还注意到最后一个点,^(.+)\s(\d{4,10})\s(.+)\。做任务。还将尝试“”之类的空间以进行进一步尝试。非常感谢
  • @QHarr 感谢您的编辑...我没有注意到没有通过。
【解决方案2】:

我会使用以下任何一种: (?:(?:([a-zA-Z]+\.?)|(\d+)))

用可能的 .允许 .pdf 或捕获数字

此版本不包括空格 [ ] 或 \s

或保持搜索结构化,以便您可以控制每列的​​输入和输出 ^(\w+\s\w+)|(\d+)|(\w+\s\w+\.\w+$) \b or ^ - 单词边界或字符串开头 (\w+\s\w+) - 第一次捕获 \w+ - 任何字母数字字符贪婪,然后是 1 x 空格 (use \s* 或 \s+ 更多),然后是字母数字贪婪 |(\d+) - 更改 - \d+ - 只捕获数字 `|(\w+\s\w+.\w+$) - 类似于第一组,但允许使用 '.' pdf 和边界到字符串的末尾(\G 或 $)。 您可以选择构建“。”像我的最佳答案一样进入第一组,但为了整洁和更好的控制,我更喜欢第二组。

【讨论】:

  • 这是如何回答问题的?
猜你喜欢
  • 1970-01-01
  • 2011-01-18
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2022-06-16
  • 2021-11-19
相关资源
最近更新 更多