正则表达式匹配无法在python中选择带空格的字母数字字符串

正则表达式匹配无法在python中选择带空格的字母数字字符串,python,regex,match,alphanumeric,Python,Regex,Match,Alphanumeric,我有以下python中的表达式列表 LIST1=["AR BR_18_0138249", "AR R_16_01382649", "BR 16 0138264", "R 16 01382679" ] 在上面的字符串中,有一些模式是字母数字的,但在两个第二组序列之间有一个空格。我期望得到以下结果 "AR BR_18_0138249" "AR R_16_01382649&quo

我有以下python中的表达式列表

LIST1=["AR BR_18_0138249",  "AR R_16_01382649",  "BR 16 0138264", "R 16 01382679" ]
在上面的字符串中,有一些模式是字母数字的,但在两个第二组序列之间有一个空格。我期望得到以下结果

  "AR BR_18_0138249"
  "AR R_16_01382649"
  "BR 16 0138264"
  "R 16 01382679" 
我尝试了以下代码

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

BR_18_0138249
R_16_01382649
None
None
我无法获得带有空格的序列。我请求有人在这方面指导我

您可以使用

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

详细信息

  • \b
    -单词边界
  • (B?R(?=([\s_])(?:\2\d++)
    -第1组:可选的
    B
    ,然后是
    R
    ,然后是一个或多个空格或下划线序列,后跟一个或多个数字(如果您需要在此处支持字母,请将
    \d+
    替换为
    [^\W\u]
  • \b
    -单词边界
  • (?!.\b\1\b)
    -如果存在,则会导致匹配失败的负前瞻
    • *
      -除换行符以外的任何零个或多个字符,尽可能多
    • \b\1\b
      -与第1组中的值相同,匹配为一个完整的单词(不包含字母、数字或下划线)
请参见(此处不需要PyPi正则表达式模块):

这就是工作:

[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

请参见演示

可能不是空白?说起来很奇怪,我知道,但可能只是因为它是一个不同的字符,呈现为一个空白?这只是两个数字之间的差距,在这种情况下正则表达式无法识别它。因此,要么不要将其视为任何东西,要么可能需要使用与任何字符之一相关的正则表达式字符。我真的不知道。我只是想试试看是的
AR BR_18_0138249
AR R_16_01382649
BR 16 0138264
R 16 01382679