正则表达式模式在某个子字符串后查找 x 长度的 n 个非 space 字符
Regex pattern to find n non-space characters of x length after a certain substring
我正在使用此正则表达式模式 pattern = r'cig[\s:.]*(\w{10})'
提取数据帧每一行中包含的“'cig'”之后的 10 个字符。使用此模式,我将考虑所有情况,但子字符串中包含一些空格的情况除外。
例如,我试图从字符串
中提取Z9F27D2198
/BENEF/FORNITURA GAS FEB-20 CIG Z9F 27D2198 01762-0000031
在前面的字符串中,似乎是 Stack overflow 对其进行了格式化,但是 F
和 2
之间应该有 17 个空格,在 CIG
.
之后
你能帮我编辑正则表达式模式以解决那个 10 个字符的子字符串中的空格吗?我还使用 flags=re.I
来忽略 re.findall
调用中字符串的大小写。
给出此模式适用的示例字符串:
CIG7826328A2B FORNITURA ENERGIA ELETTRICA U TENZE COMUNALI CONVENZIONE CONSIP E
它输出我想要的:7826328A2B
.
提前致谢。
怎么样:
# 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'
如果字符串中只有一个“CIG”,则工作正常
您可以使用
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。
我正在使用此正则表达式模式 pattern = r'cig[\s:.]*(\w{10})'
提取数据帧每一行中包含的“'cig'”之后的 10 个字符。使用此模式,我将考虑所有情况,但子字符串中包含一些空格的情况除外。
例如,我试图从字符串
中提取Z9F27D2198
/BENEF/FORNITURA GAS FEB-20 CIG Z9F 27D2198 01762-0000031
在前面的字符串中,似乎是 Stack overflow 对其进行了格式化,但是 F
和 2
之间应该有 17 个空格,在 CIG
.
你能帮我编辑正则表达式模式以解决那个 10 个字符的子字符串中的空格吗?我还使用 flags=re.I
来忽略 re.findall
调用中字符串的大小写。
给出此模式适用的示例字符串:
CIG7826328A2B FORNITURA ENERGIA ELETTRICA U TENZE COMUNALI CONVENZIONE CONSIP E
它输出我想要的:7826328A2B
.
提前致谢。
怎么样:
# 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'
如果字符串中只有一个“CIG”,则工作正常
您可以使用
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。