【问题标题】:What should be the regex expresesion?正则表达式应该是什么?
【发布时间】:2021-02-04 18:38:32
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么会这样?你的正则表达式的哪一部分匹配:

标签: python python-3.x regex string


【解决方案1】:

您可以通过将(?::\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+)? - `:~ 和一个或多个数字的可选序列。

【讨论】:

    【解决方案2】:

    如果您需要处理单个数字,您可以将时间与\d\d:\d\d\d\d?:\d\d 匹配,然后将上午/下午的内容与\w\w 匹配以获取文本。这使得正则表达式更具可读性

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

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      相关资源
      最近更新 更多