正则表达式中文字字符串的Or条件

2024-06-26 14:09:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的正则表达式

re.findall('\(([0-9].*?)\)', a[a.find('('):].strip())

为字符串定义,如

asdasdasd (21345-asdasdasd)

检索括号内后跟数字的内容。但我也希望能够检索到里面的内容,后面跟着“NA”字符串,比如:

asdasdasd (NA-asdasdasd)

我试过:

re.findall('\(([0-9].*?)\)|\((NA.*?)\)', a[a.find('('):].strip())

但是产生一个元组。会怎么样?提前谢谢


Tags: 字符串re内容定义数字find括号元组
1条回答
网友
1楼 · 发布于 2024-06-26 14:09:03

当括号内的文本以数字/NA开头,后跟-和除()以外的任何其他字符时,可以使用

re.findall(r'\(((?:[0-9]+|NA)-[^)]*)\)', a)

参见regex demo

细节

  • \(-a(
  • ((?:[0-9]+|NA)-[^)]*)-捕获组(此值将由re.findall返回):
    • (?:[0-9]+|NA)-1个或更多数字或NA
    • --连字符
    • [^)]*-0+字符,而不是)
  • \)-a)字符

参见Python demo

import re
strs = ['asdasdasd (21345-asdasdasd)', 'asdasdasd (NA-asdasdasd)']
for s in strs:
    print(re.findall(r'\(((?:[0-9]+|NA)-[^)]*)\)', s))

输出:

['21345-asdasdasd']
['NA-asdasdasd']

相关问题 更多 >