正则表达式应该是什么?

时间:2021-02-04 18:38:32

标签: python python-3.x regex string

我试图在字符串中将时间与 AM 分开。 代码

content= "11:20pm"
content = re.findall(r"[^\W\d_]+|\d+", content)
print(content)

我期望 ['11:20','pm'] 但我的代码得到 ['11','20','pm'] 我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以通过将 (?::\d+)? 模式添加到 \d+ 替代项来匹配时间:

content= "11:20pm"
content = re.findall(r"[^\W\d_]+|\d+(?::\d+)?", content)
print(content) # => ['11:20', 'pm']

参见 Python demoregex demo

请注意,您可能希望扩展模式以匹配浮点值,如果是,则需要使用 r"[^\W\d_]+|\d+(?:[:.]\d+)?"

详情

  • [^\W\d_]+ - 一个或多个字母
  • | - 或
  • \d+ - 一位或多位数字
  • (?::\d+)? - 一个`:~ 和一个或多个数字的可选序列。

答案 1 :(得分:2)

如果您需要处理个位数,您可以将时间与 \d\d:\d\d\d\d?:\d\d 匹配,然后将 am/pm 的内容与文本的 \w\w 匹配。这使正则表达式更具可读性

content= "11:20pm"
content = re.findall(r"\d\d?:\d\d|\w\w", content)
print(content)