正则表达式匹配无法 select 带空格的字母数字字符串 python

regex matching is unable to select alphanumeric string with spaces in python

我在 python

中有以下表达式列表
LIST1=["AR BR_18_0138249",  "AR R_16_01382649",  "BR 16 0138264", "R 16 01382679" ]

在上面的字符串中,一些模式是字母数字,但在第二组序列之间有一个 space。我期待以下输出

  "AR BR_18_0138249"
  "AR R_16_01382649"
  "BR 16 0138264"
  "R 16 01382679" 

我试过下面的代码

import regex as re
pattern = r"(\bB?R_\w+)(?!.*)|(\bB?R \w+)(?!.*)|(\bR?^sd \w+)(?!.*)"
for i in LIST1:
rest = re.search(pattern, i)
if rest:
    print(rest.group(1))

我得到了以下结果

BR_18_0138249
R_16_01382649
None
None

我无法获得带有 space 的序列。我请求有人在这方面指导我

您可以使用

\b(B?R(?=([\s_]))(?:\d+)+)\b(?!.*\b\b)

regex demo

详情

  • \b - 单词边界
  • (B?R(?=([\s_]))(?:\d+)+) - 第 1 组:一个可选的 B,然后是 R,然后是一个或多个空格或下划线序列,后跟一个或多个数字(如果您需要此处支持字母,将\d+替换为[^\W_])
  • \b - 单词边界
  • (?!.*\b\b) - 如果有则匹配失败的否定前瞻
    • .* - 除换行字符外的任何零个或多个字符,尽可能多
    • \b\b - 与第 1 组中相同的值匹配为整个单词(不包含字母、数字或下划线)。

看一个Python re demo(这里不需要PyPi正则表达式模块):

import re
LIST1=["AR BR_18_0138249",  "AR R_16_01382649",  "BR 16 0138264", "R 16 01382679" ]
pattern = r"\b(B?R(?=([\s_]))(?:\d+)+)\b(?!.*\b\b)"
for i in LIST1:
  rest = re.search(pattern, i)
  if rest:
    print(rest.group(1))

这样做的工作:

[A-Z]{1,2}\s([A-Z]{1,2}+(?:_[0-9]+)*|[0-9]+(?:\s[0-9]+)*)

此正则表达式给出以下输出:

AR BR_18_0138249
AR R_16_01382649
BR 16 0138264
R 16 01382679

观看演示 ​​here