繁体   English   中英

如何离线提取所需的模式(字符串)

[英]How to extract desired pattern out of line (string)

我正在尝试将我的模式与给定的字符串进行比较( 通常,我将从文件中读取行,但是现在我使用显式字符串只是为了查看其工作原理 ),尽管给定的行脚本无法按我的意愿工作。

import re

regex = '.+0+[0-9]+.'
string = "Your order number is 0000122995"

print (re.match(regex,string))

我在这里想要实现的是找到这个0000*数字并将其分配给变量( 我想稍后将其放置到Excel中 ),但是鉴于正则表达式与整行匹配,这不是我想要得到的( 我知道这是因为语法 )。 有什么技巧如何克服这个问题?

如果要在字符串中的任何位置找到匹配项,请使用re.search()而不是re.match() re.match()仅在字符串的开头检查匹配项,而re.search()在字符串的任何位置检查匹配项。

import re
regex = r'(0{4}\d+)'
string = "Your order number is 0000122995"

print (re.search(regex, string).group(0))

如果存在匹配项,则re.search()re.match()返回匹配对象。 使用match.group()返回匹配项的一个或多个子组。

有关更多信息,请参见re.search()文档。

在您的情况下,如果您希望查询与显示的查询一样一致,则将执行以下操作(它将忽略“您的订单号为”,并捕获其后面的所有内容,直到它到达空格或字符串末尾为止):

def findOrder():
        import re
        string = "Your order number is 0000122995"
        arrayAnswer = re.findall('Your order number is ([\S]+)', string)
        print('Your number in an Array is:')
        print(arrayAnswer)
        print('')
        print('Your number(s) output as a "string(s)" is/are:')
        for order in arrayAnswer:
                print(order)

通过确保调用findOrder()来运行它。 如果您想获得更多“正则表达式”,请注意您想要的内容仅包括数字,则以下内容不包括字母和空格并返回数字:

def findOrder():
        import re
        string = "Your order number is 0000122995"
        arrayAnswer = re.findall('[a-zA-Z\s]+([\d]+)', string)
        print('Your number in an Array is:')
        print(arrayAnswer)
        print('')
        print('Your number(s) output as a "string(s)" is/are:')
        for order in arrayAnswer:
                print(order)

再次,通过确保调用findOrder()来运行它。

两者的输出应该是这样的:

>>> findOrder()
Your number in an Array is:
['0000122995']

Your number(s) output as a "string(s)" is/are:
0000122995

但是,我怀疑您可能要使用比发布的字符串更长的查询。 发布,如果您需要任何进一步的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM