【问题标题】:Capture string between \n [string] \n捕获 \n [string] \n 之间的字符串
【发布时间】:2023-03-06 05:36:01
【问题描述】:

我正在尝试解析 YouTube 对歌曲的描述以编译成 .csv

目前我可以隔离时间码,但尝试隔离歌曲和艺术家被证明更棘手。

首先,我抓住了白色空间

# catches whitespace
pattern = re.compile(r'\s+')

其次,时间码(让字符串更容易处理)

# catches timecodes
pattern1 = re.compile(r'[\d\.-]+:[\d.-]+:[\d\.-]+')

然后我删除并删除。

然后我尝试捕获 \n 之间的所有字符串,因为这就是曲目列表的格式

songBeforeDash = re.search(r'^([\\n][a-zA-Z0-9]*-[a-zA-Z0-9]*[\\n]*)+$', description)

格式如下\n[string]-[string]\n

使用这个 excellent visualiser ,我已经能够对其进行调整,以便捕获第一个结果,但是任何后续结果都不匹配。 这是在第一个结果上停下来而不追赶其他结果的情况吗?

这是我试图捕捉的样本

\nmiddleschoolxAso-Cypress\nShopan-Woodnot\nchromonicci-Memories.\nYasper-MoveTogether\nFenickxDelayde-Longwayhome\nauv-Rockaway5pm\nsadtoi-Aires\nGMillsxKyleMcEvoy-Haze\nRuckP-CoffeeBreak\n

【问题讨论】:

  • 部分示例字符串不以\n开头和结尾
  • 抱歉!工作妨碍了我,我忘了回来查看。接受了最合适的答案。谢谢大家的帮助,我的程序已经取得了进展,能够解析我需要的内容:)

标签: python regex newline


【解决方案1】:

你可以用 split() 做到这一点

t = '\nmiddleschoolxAso-Cypress\nShopan-Woodnot\nchromonicci-Memories.\nYasper-MoveTogether\nFenickxDelayde-Longwayhome\nauv-Rockaway5pm\nsadtoi-Aires\nGMillsxKyleMcEvoy-Haze\nRuckP-CoffeeBreak\n'

liste = t.split('\n')
liste = liste[1:-1:]
print(liste)

【讨论】:

  • liste = t.strip().split('\n')
  • 是的,它更好
  • @Alexall 我尝试了这个建议,我得到了一个空白数组。 [ ]
  • 你的变量“描述”是一个字符串?
  • @Alexall 它是字符串,是的。事实上,当我现在尝试打印时,我得到一个空行。通过调试器,预先打印的值正常。当它到达建议的代码时,没有显示任何数据。
【解决方案2】:

re.search 只返回字符串中的第一个匹配项。 您想要的是使用返回所有匹配项的re.findall


编辑 - 因为你的匹配会重叠,我建议编辑正则表达式以捕获直到下一个换行符。现在它们不能重叠。考虑将正则表达式更改为:

r'^([\\n][a-zA-Z0-9]*-[a-zA-Z0-9]*)+$'

如果您希望它们重叠(意味着您也想捕获换行符),我建议查看 here 以了解如何捕获重叠的正则表达式模式。

另外,正如@ChatterOne 所建议的那样,在这里使用 str.split(seperator) 方法会很好,假设不存在其他类型的信息。

descriptor.split('\n')

【讨论】:

  • 在这种情况下它无论如何都不会工作,因为正则表达式的“贪婪”行为。即使使用“惰性”行为(.*?)它仍然无法工作,因为它不会使用结尾 \n 作为新匹配的起点,因此它将匹配一个,跳过一个,匹配一个,等等。这里最好的方法是使用split,正如其他答案中所建议的那样
  • 同意,修正评论,在信用到期时添加信用。
  • re.findall(r'(?<=\n)[^\n]+', description).
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 2019-06-24
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多