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

时间:2017-02-19 09:01:14

标签: python regex

我正在尝试将我的模式与给定的字符串进行比较(一般情况下我将读取文件中的内容,但现在我使用显式字符串只是为了查看它是如何工作的)尽管对于给定的行脚本确实如此不按我的意愿工作。

import re

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

print (re.match(regex,string))

我在这里想要实现的是找到这个0000*数字并将其分配给变量(我希望稍后将其放入Excel中),但是给定正则表达式匹配整行,这不是我想要的(我知道这是因为语法)。任何提示如何克服这个?

2 个答案:

答案 0 :(得分:0)

如果要在字符串中的任何位置找到匹配项,请使用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()文档。

答案 1 :(得分:0)

在您的情况下,如果您希望您的查询与您所显示的一致,则以下内容将起作用(它会忽略"您的订单号为"并捕获其背后的所有内容,直至其达到空格或字符串的结尾):

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()来运行它。如果你想获得更多" regexy",注意你想要的只包括数字,下面不包括字母和空格并返回数字:

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

我怀疑,您可能希望使用比您发布的字符串更长的查询。如果您还需要更多信息,请发布。