gpt4 book ai didi

python - 改进正则表达式搜索模式

转载 作者:行者123 更新时间:2023-11-30 22:37:45 25 4
gpt4 key购买 nike

假设我有一个如下所示的文件:

'''
MFTF2LH_LSetC1_D-10_hot50_fa00_bpmax
MFTF2LH_LSetC1_D-11_hot50_fa00_bpmax
MFTF2LH_LSetC1_D-01_hot56_fa00_bpmax
MFTF2LH_LSetC1_D-02_hot56_fa00_bpmax
MFTF2LH_LSetC1_D-03_hot56_fa00_bpmax
MFTF2LH_LSetC1_D-04_hot50_fa00_bpmax
MFTF2LH_LSetC1_D-07_hot43_fa00_bpmax
MFTF2LH_LSetC1_D-10_hot56_fa00_bpmax
'''

但有数百万行。

我想做的是逐行阅读它并忽略那些具有以下特征的行:

  • _D-XX_hotYY,其中 XX 包含在 [01, 07] 内,且 YY = 43 <强>或 50
  • _D-XX_hot56,其中 XX 包含在 [08, 11] 范围内

因此对于上面的示例行,只有最后三行会被忽略。

我正在使用这个regex达到这个目的的模式( test here ):

pattern = '(_D-0[1-7]_hot(43|50)|_D-0[8,9]_hot56|_D-1[0,1]_hot56)'

但是我想知道是否有更好的方法来做到这一点,因为我只想返回一个 bool 值;没有群组或任何东西。

我是 regex 的初学者顺便说一句。

最佳答案

您可以通过使替代项仅在字符串中的不同位置匹配来改进您的模式。

使用

rx = re.compile(r'_D-(?:1[01]_hot56|0(?:[89]_hot56|[1-7]_hot(?:43|50)))')
# .... Read the file line by line ...
if not rx.search(line):
# Ok, process

请参阅regex demo

图案详细信息:

  • _D- - 文字子字符串
  • (?: - 非捕获组的开始(与捕获组不同,不会为组创建内存缓冲区)匹配:
    • 1[01]_hot56 - 1,然后 01,然后 _hot56
    • | - 或
    • 0 - 一个 0 字符,然后
    • (?: - 第二个非捕获组
      • [89]_hot56 - 89,然后 _hot56
      • |
      • [1-7]_hot(?:43|50) - 从 17 的数字,然后是 _hot ,然后是 4350
    • ) - 第二个非捕获组的末尾
  • ) - 第一个非捕获组的末尾

关于python - 改进正则表达式搜索模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43785588/

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