python正则表达式环顾谜

2024-05-23 20:08:40 发布

您现在位置:Python中文网/ 问答频道 /正文

用更全面的字符串示例编辑的问题

试图找到一个正则表达式,如果后跟短语^{,则该正则表达式只能从下面的示例文本中提取数值。我已经添加了我可以从数据中挖掘出的所有内容的排列。给你

“起诉2903.04.A非自愿PLD GLTY@TRL陪审团”、“起诉2903.01.B加重NOLLE”、“起诉2911.01抢劫PLD GLTY@TRL陪审团”、“起诉2905.01.A(2)NOLLE”、“起诉2903.02.B NOLLE”、“起诉2911.02.A(2)NOLLE”、“起诉2903.111.A(1)重罪殴打PLD GLTY”、“起诉2913.05抢劫PLD GLTY@TRL陪审团”、“起诉2923.13.A(3)在残疾期间拥有武器PLD GLTY'

预期结果(理想情况下放入python列表)

['2903.04','2911.01','2903.111','2913.05','2923.13']

部分有效的样本

最有效的示例

29..\...+(?=PLD GLTY)

效果更好,但仍然捕获太多

\d{4}\.\d{2}(.*PLD GLTY)

就快到了,还没到

(\d{4}\.\d{2}\d?)(.*PLD GLTY)

我们的目标是将上述列中的文本提取出来,仅从文本中提取被告认罪的数字法规

谢谢你们所有的正则表达式向导们的帮助


Tags: 数据字符串文本编辑示例内容数值武器
3条回答

我想把你的问题表述为:

str = 'This is statute 2913.42 and defendant PLD GLTY, This is statute 2913.405 and defendant at pre-trial PLD GLTY, This is statute 2913.44 without any plea of guilt'
matches = re.findall(r'\b\d+(?:\.\d+)?(?=[^\d]+\bPLD GLTY)', str)
print(matches)

这张照片是:

['2913.42', '2913.405']

正则表达式逻辑要求找到每个具有属性的十进制数,我们可以向前看,而不必看到另一个数字,然后在字符串的后面某处找到文本PLD GLTY

(这是一个扩展的评论,而不是一个答案。请不要投票,否则我可能不得不再次删除它。)

问题中给出的示例字符串不足以测试给出的解决方案是否会确保输出中只包含PLD GLTY出现之前的最后一个数字

使用此字符串:

str = "This is statute 2913.42 and defendant PLD GLTY, This is statute 2913.44 without any plea of guilt, This is statute 2913.405 and defendant at pre-trial PLD GLTY"

显然,您希望它返回:['2913.42', '2913.405']

在撰写本文时,共有三个答案,其中只有一个通过了该测试,尽管使用问题中给出的测试字符串,所有三个都通过了测试

你就快到了。我刚刚修改了您的前瞻示例,添加了一个非贪婪的.*和一些细微的调整:

(\d{4}\.\d{2,3}).*?(?=PLD GLTY)

代码

import re

str = 'This is statute 2913.42 and defendant PLD GLTY, This is statute 2913.405 and defendant at pre-trial PLD GLTY, This is statute 2913.44 without any plea of guilt'

print(re.findall(r'(\d{4}\.\d{2,3}).*?(?=PLD GLTY)', str))
# ['2913.42', '2913.405']

d{2}\d?最好写成\d{2,3}(数字总是出现2到3次)

^{}是Python中内置的,因此建议不要将其用作变量名、自定义函数名或其他任何名称,尽管我在这里使用它来匹配您的代码

相关问题 更多 >