gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:36:41 24 4
gpt4 key购买 nike

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

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

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

在前面的字符串中,似乎是 Stack overflow 对其进行了格式化,但 CIG 之后的 F2 之间应该有 17 个空格.

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

给出此模式适用的示例字符串:

CIG7826328A2B FORNITURA ENERGIA ELETTRICA U TENZE COMUNALI CONVENZIONE CONSIP E

它输出我想要的: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 .

关于python - 正则表达式模式在某个子字符串后查找 x 长度的 n 个非空格字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66767337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com