Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式[新手]_Python_Regex - Fatal编程技术网

python正则表达式[新手]

python正则表达式[新手],python,regex,Python,Regex,如果我想得到13和46,如何编写编译规则?如果你想扩展你的解决方案来处理任意长度的数字,那么你可以使用检查字符串是否只由数字组成的方法str.isdigit在不使用regexp的情况下完成这项工作 >>> my_words = 'ABC 123 456 www' >>> my_words 'ABC 123 456 www' >>> import re >>> p = re.compile(r'\d{3}') >>

如果我想得到13和46,如何编写编译规则?

如果你想扩展你的解决方案来处理任意长度的数字,那么你可以使用检查字符串是否只由数字组成的方法
str.isdigit
在不使用regexp的情况下完成这项工作

>>> my_words = 'ABC 123 456 www'
>>> my_words
'ABC 123 456 www'

>>> import re
>>> p = re.compile(r'\d{3}')
>>> p.findall(my_words)
['123', '456']
如果您想从数字中删除中间数字,那么您可以使用捕获组使用
re

my_words = 'ABC 123 456 www 13 46'
numbers = [word for word in my_words.split() if word.isdigit()]
numbers  # ['123', '456', '13', '46']

坦白地说,我不会用正则表达式。简单的列表理解就可以做到这一点,从中可以提取第一个和最后一个字符:

my_words = 'ABC 123 456 www'
numbers = list(map(''.join, re.findall(r'(\d)\d(\d)', my_words)))
numbers # ['13', '46']

您的输入中没有13或46。您是否在询问如何从输出中删除中间数字?这不是你可以用正则表达式做的事情。你说你也想得到'13'和'46',你的意思是你想让它对'ABC 13'这样的字符串起作用还是你想去掉中间的数字?哇。。你们很热情!如果匹配3位长字符串,我想删除列表中的中间数字,谢谢帮助ᴀʀᴍᴀOlivier Melançon和Mureinikmap(''.join,re.findall(r'(\d)\d(\d'),我的话))这就是我想要的,谢谢@3h1Nh7YX24您的号码总是3位数吗?如果是这样,Mureinik答案是最好的方法
result = [w[0] + w[-1] for w in my_words.split() if len(w) == 3 and w.isdigit()]