gpt4 book ai didi

python - python中的简单正则表达式

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

我有一个包含两种类型行的文本文件。一种类型如下:

'6-digit-primary-id','6-digit-secondary-id',subject,author,text

另一个只是没有特定模式的单词。在前一种情况下,我想知道主 ID 和文本,而在后一种情况下,我想获取单词。我尝试过的:

PATTERN = r'[1-9]{6},[1-9]{6},?*,?*,*'
match = re.match(PATTERN,input_line)
if match:
primary_id = match.group()[0]
text = match.group()[7]
else:
text = input_line

但显然我做错了什么(得到“无效语法”)

谁能给我指出正确的方向吗?

最佳答案

? 在正则表达式模式中具有特殊含义。它(贪婪地)匹配前面的正则表达式的 0 或 1 个。因此 ,? 匹配逗号或不匹配逗号。 ,?* 引发 sre_compile.error

也许您想要使用 . 而不是 。它匹配除换行符之外的任何字符(除非指定了 re.DOTALL 标志)。

PATTERN = r'(\d{6}),(\d{6}),(.*?),(.*?),(.*)'
match = re.match(PATTERN, input_line)
if match:
primary_id = match.group(1)
text = match.group(5)
else:
text = input_line
<小时/>

其他一些建议:

  • 您可以使用\d指定字符模式[0-9]。请注意,这会将 0 添加到您的角色类中。 (我认为这没问题)。如果没有,您可以继续使用 [1-9]{6}
  • 如果您将组放入正则表达式模式中,那么您可以指定使用 match.group(num) 而不是 match.group()[num] 的部分。 (看起来您想要 match.group(5) 而不是 match.group()[7]。)
  • 模式 .* 匹配尽可能多的字符。 .*?非贪婪地匹配。您需要非贪婪地匹配主题和作者模式,以免它们扩展以匹配整行的其余部分。
  • 此处 .*? 的替代方案是 [^,]*。这匹配 0 个或多个逗号以外的字符。

    PATTERN = r'(\d{6}),(\d{6}),([^,]*),([^,]*),(.*)'

关于python - python中的简单正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064449/

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