gpt4 book ai didi

python - 使用正则表达式剪切以特定字符开头的字符串?

转载 作者:行者123 更新时间:2023-11-28 23:01:20 24 4
gpt4 key购买 nike

我正在处理一个平面文件,数据是逐行格式的,如下所示

... blah blah blah | sku: 01234567 | price: 150 | ... blah blah blah

我要提取sku字段,它是长度为8个字符的数字。但是,我不确定是否应该使用split或regex,我不太擅长在python中使用regex。

最佳答案

假设您的sku值总是8个字符长,并且前面总是有'sku',可能还有一些':'(中间有或没有空格),那么我将使用regex:r'sku[\s:]*(\d{8})'

>>> import re
>>> string = '... | sku: 01234567 | price: 150 | ... '
>>> re.findall(r'sku[\s:]*(\d{8})', string)[0]
'01234533'

如果 sku值的长度可能是可变的,请使用: r'sku[\s:]*(\d*)'
>>> import re
>>> string = '... | sku: 01234 | price: 150 | sku: 99872453 | blah blah ... '
>>> re.findall(r'sku[\s:]*(\d*)', string)[0]
'01234'
>>> re.findall(r'sku[\s:]*(\d*)', string)[1]
'99872453'

编辑
如果您的“sku”后面跟着其他字符,如 sku1sku2sku-spsku-18sku_anything,您可以尝试:
>>> re.findall(r'sku\D*(\d*)', string)[0]

这完全等同于:
>>> re.findall(r'sku[^0-9]*([0-9]*)', string)[0]

很一般。它将匹配以 sku开头的任何内容,然后是任何未确定数量的非十进制字符( \D*,或 [^0-9]*)和一些十进制字符( \d*,或 [0-9]*)。它将返回后者(一个长度待定的十进制字符字符串)。
现在,我用来构建这些表达式的东西是什么意思:
量词
*:当跟随单个字符或一类字符时,此符号表示表达式将匹配其跟随的任何未确定数量的字符或类( *表示“0或一些”、 +表示“至少一个”、 ?表示“0或1”)。
{}的用法与 *+?相同,即它们跟随一个字符或一类字符。它们也是量词。如果你说 c{4},它将匹配由4'c'组成的任何字符串。如果你说 c{1,6},它将匹配由1到6'c'组成的任何字符串。
班级
[]:定义一类字符。 [abc]表示任何字符“a”、“b”或“c”。 [a-z]表示任何小写字母。 [A-Z],任意大写字母, [a-zA-Z]任意小写和大写字母,[0-9]任意十进制字符。如果要将小数与点或逗号、加号、减号和“e”(例如指数)匹配,只需说 [0-9,\.+-e]
类内部的 ^[]定义,表示“反向类”,除了类之外的所有内容。那么, [^0-9]表示除十进制字符以外的任何字符, [^a-z]表示除小写字母以外的任何字符,等等。
预定义类
这些是在python中预定义的类,用于使regex语法更友好:
\s:将匹配任何间距字符(空格、制表等)
\d:将匹配任何十进制字符(0、1、2、3、4、5、6、7、8、9。。。这相当于 [0-9],这是在正则表达式中表示字符类的另一种方式)
\D:将匹配任何非十进制字符。。。这相当于 [^0-9],这是在正则表达式中表示排除字符类的另一种方法。
\S:将匹配任何非空格字符。。。
\w:将匹配任何“单词字符”
\W:将匹配任何非单词字符
...

()定义了一些组。它们有很多用法。在这里,在 findall中,组将突出显示您希望由表达式返回的内容。。。即 (\d{8})[0-9]{8}意味着您希望表达式只返回匹配完整字符串中8个十进制字符的字符串。
正则表达式非常容易使用,而且非常有用。你只需要很好地理解他们能做什么和不能做什么(他们只限于普通语言)。如果您需要处理嵌套的级别,例如,或者使用上下文无关语法定义的其他语言,那么regex是不够的)。您可能需要查看以下页面:
http://docs.python.org/library/re.html
http://www.regular-expressions.info/tutorial.html

关于python - 使用正则表达式剪切以特定字符开头的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125401/

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