我正在尝试将我的模式与给定的字符串进行比较(一般情况下我将读取文件中的内容,但现在我使用显式字符串只是为了查看它是如何工作的)尽管对于给定的行脚本确实如此不按我的意愿工作。
import re
regex = '.+0+[0-9]+.'
string = "Your order number is 0000122995"
print (re.match(regex,string))
我在这里想要实现的是找到这个0000*
数字并将其分配给变量(我希望稍后将其放入Excel中),但是给定正则表达式匹配整行,这不是我想要的(我知道这是因为语法)。任何提示如何克服这个?
答案 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
我怀疑,您可能希望使用比您发布的字符串更长的查询。如果您还需要更多信息,请发布。