regex Python正则表达式来解析字符串中的datetime,datetime对象

xbp102n0  于 2023-02-05  发布在  Python
关注(0)|答案(1)|浏览(103)

我有以下字符串:

"{'foo': datetime.datetime(2022, 5, 23, 0, 0, tzinfo=tzlocal()), 'bar': 'some data', 'foobar': datetime.datetime(2022, 8, 3, 13, 57, 41, tzinfo=<UTC>), 'barlist': ['hello', 'world']}"

我希望能够匹配这个字符串中的所有datetime.datetime(...)字符串,并且只将其替换为列表形式的数字,所以这是预期的结果:

"{'foo': [2022, 5, 23, 0, 0], 'bar': 'some data', 'foobar': [2022, 8, 3, 13, 57, 41], 'barlist': ['hello', 'world']}"

我有这样的东西:

DATETIME_PATTERN = r"datetime.datetime\(((\d+)(,\s*\d+)*), tzinfo=.*\)"
modified_input_str = re.sub(DATETIME_PATTERN, r"[\1]", input_str)

但是它替换了匹配之间的一大块数据。我怎么修改正则表达式来完成我想要的呢?
结论:我对当前最佳答案进行了修改,使其更适合我的特定使用情形:

DATETIME_PATTERN = r"datetime\.datetime\((\d+(?:,\s*\d+)*), tzinfo=(?:[^\s\d])*\)"

# The difference is that the string at the end of 'tzinfo=' can be anything but whitespace or numbers.
hgc7kmma

hgc7kmma1#

您可以使用

datetime\.datetime\((\d+(?:,\s*\d+)*), tzinfo=(?:\(\)|[^()])*\)
  • 详细信息 *:
  • datetime\.datetime\(-一个datetime.datetime(字符串
  • (\d+(?:,\s*\d+)*)-第1组:一个或多个数字,然后零次或多次重复逗号+零个或多个空格,然后一个或多个数字
  • , tzinfo=-文字字符串
  • (?:\(\)|[^()])*-()字符串或除()之外的任何字符的零次或多次重复
  • \)-一个)字符

请参见regex demo

相关问题