如何使用正则表达式从一行文本中提取数值?
Posted
技术标签:
【中文标题】如何使用正则表达式从一行文本中提取数值?【英文标题】:How to extract a numeric value from a line of text with a regular expression? 【发布时间】:2021-12-03 18:58:19 【问题描述】:我是正则表达式的新手,帮我从文本中提取必要的信息:
salespackquantity=1&itemCode=3760041","quantity_box_sales_uom"
&salespackquantity=1&itemCode=2313441","quantity_box
我需要分别取数字 3760041 和 2313441。正则表达式应该是什么样的?
【问题讨论】:
您需要使用正则表达式还是字符串操作有效? 是的,我需要正则表达式 请尝试一下 我尝试了 itemCode=[0-9]*\" 但它保存了整个字符串,我只需要数字(在 ItemCode= 和 "之间) 【参考方案1】:如果我们只处理您展示的基于行的数据,那么它可能很简单:
.*itemCode=([0-9]+).*
这是残酷的,但会做的工作。您将提取第一个匹配组。
虽然您的示例似乎不一致且被截断,但可能会有所不同。如果有其他条件,请提供更多细节。
示例
>>> import re
>>> oneline = "salespackquantity=1&itemCode=3760041\",\"quantity_box_sales_uom\""
>>> match = re.search('.*itemCode=([0-9]+).*', oneline)
>>> match.group(0)
'salespackquantity=1&itemCode=3760041","quantity_box_sales_uom"'
>>> match.group(1)
'3760041'
你真的需要正则表达式吗?
可以说,正则表达式似乎是一种在这里获得所需内容的简单方法,但它可能效率极低,具体取决于您的用例和输入数据。
其他几种策略可能更容易:
先删除不必要的数据, 为您的特定内容使用适当的解析器(这里看起来像是 CSV 和 URL 查询字符串的混合), 如果格式是固定的,甚至不要打扰和切割适当的边界。正则表达式功能强大,对于简单的场景可能过于强大。不过,如果要运行一次性数据提取脚本,或者开发工作的成本/收益分析是否值得,那是完全公平的。
【讨论】:
你的例子选择了整个文本,我只需要这些数字(在ItemCode=和"之间) @user461101:不。这取决于您如何使用我的示例。请注意,我说要提取第一个匹配组,这将是数字部分。 @user461101:我已经调整了我的答案,通过 python REPL 的一个活生生的例子向你展示它是如何完成的。 在我的情况下不起作用。这是我的表达式 itemCode=([0-9]+)。 ,如何修改它以便只选择数字,因为现在选择了整个字符串(itemCode=3760041") @user461101:如果您不显示您的代码,我无法帮助您。我给了你一个实际的工作示例,直接来自 Python 3 REPL。我不知道你的情况,因为我不知道你的确切数据、你的代码以及你运行它的方式。【参考方案2】:a = "example is the int and string 223576"
ext = []
b = "1234567890"
for i in a:
if i in b:
ext.append(i)
print(ext)
【讨论】:
嗯,这很可爱,但不太好用。 1/ 你假设 A 和 B 中的位置是相同的(它们不是)。 2/并且还会拾取字符串中的非连续字符(如“something2then234andthenagain76”)。 它将作为字符串序列工作并选择,而不是像字母数字索引。可能有人有其他想法。 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。以上是关于如何使用正则表达式从一行文本中提取数值?的主要内容,如果未能解决你的问题,请参考以下文章