你好,我有一个用逗号分隔的 ID 列表,我需要取出能被 3 整除的 ID。
答案1
使用正则表达式无法以任何有用的方式做到这一点。
根据您的上下文,您可以使用例如
[i for i in my_ids.split(',') if int(i) % 3==0]
(假设字符串my_ids
包含你的 ID)
答案2
此正则表达式将匹配所有能被三整除的数字:
^([0369]|[147][0369]*([147][0369]*[258][0369]*)*([147][0369]*[147]|[258])|[258][0369]*([258][0369]*[147][0369]*)*([258][0369]*[258]|[147]))+$
以下是一个例子伊帕特里克会话使用这个结构:
In [1]: import re
In [2]: my_ids = '1, 2, 3, 4, 5, 6, 7'
In [3]: idres = [x[0] for x in re.findall(r'\b([0369]|[147][0369]*([147][0369]*[258][0369]*)*([147][0369]*[147]|[258])|[258][0369]*([258][0369]*[147][0369]*)*([258][0369]*[258]|[147]))+\b', my_ids)]
In [4]: idres
Out[4]: ['3', '6']
这能可以做到,但是 – 如果你确定你的输入只包含逗号分隔的整数(而不是单词) – 那么 Florian Diesch 的答案包含一种更明智的方法来做到这一点。
不同之处:Florian 的答案会将逗号分隔的所有内容转换为整数(当输入格式不正确时可能会导致问题),将它们相除并返回整数(如果有效)。正则表达式版本只会扫描输入以查找任何可被三整除的数字(两侧都有单词边界)并将它们返回为字符串。