正则表达式模式,用于在某个子字符串后查找x长度的n个非空格字符

2024-10-04 05:29:59 发布

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

我使用这个正则表达式模式pattern = r'cig[\s:.]*(\w{10})'提取数据帧每行中包含的“'cig'”后面的10个字符。使用此模式,我将考虑所有情况,但子字符串中包含一些空格的情况除外

例如,我试图从字符串中提取Z9F27D2198

/BENEF/FORNITURA GAS FEB-20 CIG Z9F                 27D2198 01762-0000031

在前一个字符串中,它似乎是堆栈溢出格式化的,但是在F2之间,在CIG之后应该有17个空格

你能帮我编辑正则表达式模式以解释10个字符子字符串中的空格吗?我还使用flags=re.I来忽略re.findall调用中字符串的大小写

要给出此模式适用的示例字符串,请执行以下操作:

CIG7826328A2B FORNITURA ENERGIA ELETTRICA U TENZE COMUNALI CONVENZIONE CONSIP E

它输出我想要的:7826328A2B

提前谢谢


Tags: 数据字符串re模式情况febpattern空格
2条回答

那么:

# removes all white spaces with replace()

x = 'CIG7826328A2B FORNITURA ENERGIA ELETTRICA U'.replace(' ', '')
x = x.split("CIG")[1][:10] 
# x = '7826328A2B'

x = '/BENEF/FORNITURA GAS FEB-20 CIG Z9F 27D2198 01762-0000031'.replace(' ', '')
x.split("CIG")[1][:10]
# x = '7826328A2B'

如果字符串中只有一个“烟”,则可以正常工作

你可以用

r'(?i)cig[\s:.]*(\S(?:\s*\S){9})(?!\S)'

regex demo详细信息

  • cig-一个cig字符串
  • [\s:.]*-零个或多个空格,:.
  • (\S(?:\s*\S){9})-组1:一个非空白字符,然后出现九个零或多个空白字符,后跟一个非空白字符
  • (?!\S)-右边必须有空格或字符串结尾

在Python中,可以使用

import re
text = "/BENEF/FORNITURA GAS FEB-20 CIG Z9F               27D2198 01762-0000031"
pattern = r'cig[\s:.]*(\S(?:\s*\S){9})(?!\S)'
matches = re.finditer(pattern, text, re.I)
for match in matches:
  print(re.sub(r'\s+', '', match.group(1)), ' found at ', match.span(1))

# => Z9F27D2198  found at  (32, 57)

Python demo

相关问题 更多 >