用于同时捕获一串字符的正则表达式

RegEx for capturing a string of characters at the same time

我需要创建一个基于正则表达式(Regular Expression)的过滤器。这是示例:

必须创建一个可以过滤这两个数据文件名的过滤器:

ZVSEBACTAA.PACS_.0230.[YYYYMMDDhhmmss].[Q5].EBA.S202SCTAAAAAAAA.I
ZVSEBADD11.PACS_.0230.[YYYYMMDDhhmmss].[Q5].EBA.S202COR11111111.I

为了包括他们两个的所有句子,我们有这个正则表达式(已经完成):

(^(ZVSEBACT|ZVSEBADD)[A-Z,0-9]{2}\.PACS_\.0230\.)(.*)\.EBA\.(S202(SCT|COR))([A-Z,0-9]{8})\.I$

但是,我需要找到一个过滤器来过滤 AAAAAAAA(总共 8 个长度的字符串),但也可以用 11111111(同样的长度,但在这种情况下用数字)代替,在所有情况下,总共 8 个字符可以是数字或可互换的字符。

我创建的过滤器(使用 Notepad++ 作为编码工具):

([A-Z,0-9]{8})\.I$

这意味着我想过滤一串长度为8的字符,但我的疑问是最后,我不知道如何只selected到最新的A(或1 ), 以覆盖第一行的 AAAAAAAAA,以及第二行的 11111111。

创建过滤器后,应该 selected AAAAAAAAA 和 11111111,但实际上是 select AAAAAAAAAA.I 和 11111111.I。

ZVSEBACTAA.PACS_.0230.[YYYYMMDDhhmmss].[Q5].EBA.S202SCTAAAAAAAA.I
ZVSEBADD11.PACS_.0230.[YYYYMMDDhhmmss].[Q5].EBA.S202COR11111111.I

没有错误或警告,但应跳过结尾 (.I),预计仅涵盖上述 8 个位置。

根据您使用的正则表达式的类型(有几种不同的类型),您应该能够使用积极的前瞻而不是在最后捕获文本。

例如:

(\b(ZVSEBACT|ZVSEBADD)[A-Z,0-9]{2}\.PACS_\.0230\.)(.*?)\.EBA\.(S202(SCT|COR))([A-Z,0-9]{8})(?=\.I\b)

我更改了一些内容:

正则表达式中的字符 . 是一个通配符,因此我将它们设为 \. 在看起来您实际上是在寻找 . 字符的地方。 上面的文本我 copy/pasted 粘贴在一行中,所以我将 ^ 和 $ 更改为 \b (单词边界),这允许同一行上的多个匹配项匹配两个数字。

添加(?=\.I\b)向前看(捕获后)以确保接下来的字符是.I后跟单词的结尾(即文档结尾或space, 等) 而没有捕获它们。

regex101 上试用一下,如果这不是您想要的,请告诉我!

您说过您正在使用 Notepad++,这里有一个方法:

  • Ctrl+F
  • 查找内容:^ZVSEB(?:ACT|ADD)[A-Z0-9]{2}\.PACS_\.0230\..+?\.EBA\.S202(?:SCT|COR)\K[A-Z0-9]{8}(?=\.I$)
  • 选中环绕
  • 检查正则表达式
  • 取消勾选. matches newline
  • 在当前文档中查找所有内容

解释:

^                   # beginning of line
ZVSEB               # literally
(?:ACT|ADD)         # non capture group, ACT or ADD
[A-Z0-9]{2}         # 2 uppercase or digit
\.PACS_\.0230\.     # literally
.+?                 # 1 or more any character, not greedy
\.EBA\.S202         # literally
(?:SCT|COR)         # non capture group, SCT or COR
\K                  # forget all we have seen until this position
[A-Z0-9]{8}         # 8 uppercase or digit
(?=\.I$)            # positive lookahead, make sure we have after: .I then end of line

屏幕截图:

Demo at regex101