Python:正则表达式过滤器 ID 可被 3 整除

Python:正则表达式过滤器 ID 可被 3 整除

你好,我有一个用逗号分隔的 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 的答案会将逗号分隔的所有内容转换为整数(当输入格式不正确时可能会导致问题),将它们相除并返回整数(如果有效)。正则表达式版本只会扫描输入以查找任何可被三整除的数字(两侧都有单词边界)并将它们返回为字符串。

相关内容