【问题标题】: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 demo 和regex 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)