【问题标题】:Regex output has empty strings i cannot understand正则表达式输出有我无法理解的空字符串
【发布时间】:2021-03-21 08:10:18
【问题描述】:

我对正则表达式有点陌生,我的输出列表中有一些我无法理解的空字符串。我有以下字符串:

string ='[-1, <samp>clear</samp>, -1, None, -1] [-1, None, -1, None, -1, <time class="text-nowrap" datetime="2021-03-22T17:06:03.000Z" id="availability-time"></time>, -1, None, -1'

我正在尝试提取&lt;samp&gt; tags (which is "clear") 和日期2021-03-22T17:06:03.000Z 之间的单词。尽管我的模式看起来运行良好,但当我将它们与逻辑运算符或 (|) 组合在一起时,输出列表中会出现空字符串。

示例:

import re

pattern = '\>([a-zA-Z]+)\<'
pattern2= '(\d{4}-\d{2}-\d{2}[a-zA-Z][\d:\.[a-zA-Z]+)'

string = '[-1, <samp>clear</samp>, -1, None, -1] [-1, None, -1, None, -1, <time class="text-nowrap" datetime="2021-03-22T17:06:03.000Z" id="availability-time"></time>, -1, None, -1'

print(re.findall(pattern,string))
print(re.findall(pattern2,string))

输出

['clear']
['2021-03-22T17:06:03.000Z']

现在,当我将 patternpattern2| 结合起来时,我得到以下结果:

import re
pattern = '\>([a-zA-Z]+)\<|(\d{4}-\d{2}-\d{2}[a-zA-Z][\d:\.[a-zA-Z]+)'

string = '[-1, <samp>clear</samp>, -1, None, -1] [-1, None, -1, None, -1, <time class="text-nowrap" datetime="2021-03-22T17:06:03.000Z" id="availability-time"></time>, -1, None, -1'

print(re.findall(pattern,string))

输出

[('clear', ''), ('', '2021-03-22T17:06:03.000Z')]

这些空字符串从何而来?请帮忙!

【问题讨论】:

    标签: python python-3.x regex string


    【解决方案1】:

    当您定义捕获组时,您观察到的输出只是re.findall 的预期行为。在这种情况下,每个元组中的第一个条目是第一个捕获组(来自模式的&lt;samp&gt; 部分),而第二个条目是第二个捕获组(来自时间戳)。您的交替只会匹配这两个捕获组之一,因此输出将始终是带有一个空字符串的 2 元组。

    这里一种可能的解决方法是完全避免捕获组:

    pattern = '(?<=>)[a-zA-Z]+(?=<)|\d{4}-\d{2}-\d{2}[a-zA-Z][\d:\.[a-zA-Z]+'
    string = '[-1, <samp>clear</samp>, -1, None, -1] [-1, None, -1, None, -1, <time class="text-nowrap" datetime="2021-03-22T17:06:03.000Z" id="availability-time"></time>, -1, None, -1'
    print(re.findall(pattern,string))  # ['clear', '2021-03-22T17:06:03.000Z']
    

    通过对模式的&lt;samp&gt; 部分进行轻微更改以使用环视,我们可以避免捕获组。然后,来自re.findall 的每个匹配项都将是列表中的一个条目。

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多