gpt4 book ai didi

python - 需要一个 Goldilocks 正则表达式模式 - 不要太贪婪也不要太自私

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:16 24 4
gpt4 key购买 nike

我有一组字符串可能看起来像这样:

lines_ = ["04/04      1,000.00    Some word132:11bdkljas     14235262634235",
"04/04 500.00 A simpler phrase 19058453049854",
"04/04 1,000,000.00 Apply//erklj//1324:123"]

我正在尝试编写一个正则表达式来提取字符串的前三个“元素”。我意识到基于这个例子,我可以简单地使用 re.split("\s{2,}") 然后只抓取前三个元素,但我不能保证输入总是会有两个或更多的空间来分隔我想要的部分。所以我宁愿有一个更强大的正则表达式来捕获它。

我试过用这个:

r"(\d{2}/\d{2})\s+([\d,]+\.\d\d)\s+(.+)(\s+\d+)"

这适用于前两个元素,但不适用于第三个元素,因为那里没有数字集。然后我将其调整为:

r"(\d{2}/\d{2})\s+([\d,]+\.\d\d)\s+(.+)(\s+\d+)?"

这适用于第三个元素,但对于前两个元素,它包括第四个元素作为第三个元素的一部分。所以我进一步调整它看起来像这样:

r"(\d{2}/\d{2})\s+([\d,]+\.\d\d)\s+(.+?)(\s+\d+)?"

认为 (.+) 中的 ? 会使它不那么贪婪并且不会吞噬最后一个元素。相反,它给了我第三个元素中第一个单词的第一个字母,仅此而已。

我希望得到的结果是如下所示的输出:

groups_ = [("04/04", "1,000.00", "Some word132:11bdkljas"),
("04/04", "500.00", "A simpler phrase"),
("04/04", "1,000,000.00", "Apply//erklj//1324:123")]

任何关于我在正则表达式中遗漏的建议都将不胜感激。

最佳答案

将此模式与 mg 选项一起使用

(\d{2}/\d{2})\s+([\d,]+\.\d\d)\s+(.+?)(?:\s+(\d+)|,|$)  

Demo

关于python - 需要一个 Goldilocks 正则表达式模式 - 不要太贪婪也不要太自私,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244828/

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