python - Python正则表达式 - 提取浮点模式
问题描述
我正在尝试从字符串中提取特定的“浮点数”,它包含多个格式化的“整数”、“浮点数”和日期。所讨论的特定“浮动”由一些标准化文本主持。
字符串示例
my_string = """03/14/2019 07:07 AM
Soles in mDm : 2864.35⬇
BTC purchase in mdm: 11,202,782.0⬇
"""
我已经能够从 , 中提取所需的浮点模式,2864.35
但my_string
如果这个特定的浮点模式发生变化或出现另一个具有相同格式的浮点数,我的脚本将不会返回所需的结果
regex = r"(\d+\.\d+)"
matches = re.findall(regex, my_string)
for match in matches:
print(match)
- 由于数字格式不一致,它可能会截断所需的浮点数
- 它可能会打印两个浮点数,因为不需要的浮点数的数字模式太相似而无法被当前正则表达式过滤掉
regex
正则表达式的期望返回regex
- 具有灵活整数部分的浮点数,有时省略逗号,即。45000.50 其他时间 45,000.50
- 唯一的行标识符:
Soles
它可以是大写/小写 - 行标识符:浮点前缀
:
- 它应该只返回一个浮点数
仅在字符串的第二行中所需浮点数的一些差异
您在下面看到的是同一行的三个示例,即 中的第二行my_string
。尽管有任何变化,例如鞋底或鞋底,正则表达式应该只能返回第二行
- 鞋底 mDm : 2864.35⬇</li>
- 鞋底 MDM:2,864.35
- mdm 鞋底:2,864.355
regex
非常感谢编辑或重写当前正则表达式的任何帮助
解决方案
编辑 - 嗯......如果它必须遵循,soles
那么希望这会有所帮助
试试这些,当然我的控制台不能接受额外的字符,但根据您的输入:
>>> my_string = """03/14/2019 07:07 AM
Soles in mDm : 2864.35
BTC purchase in mdm: 11,202,782.0
Soles in mDm : 2864.35
soles MDM: 2,864.35
Soles in mdm :2,864.355
"""
>>> re.findall('(?i)soles[\S\s]*?([\d]+[\d,]*\.[\d]+)', my_string)
#Output
['2864.35', '2864.35', '2,864.35', '2,864.355']
>>> re.findall('[S|s]oles[\S\s]*?([\d]+[\d,]*\.[\d]+)', my_string)
#Output
['2864.35', '2864.35', '2,864.35', '2,864.355']
推荐阅读
- webkit - Playwright webkit 无法在 Windows 10 上运行
- azure-devops - 如何访问从作业 1 到作业 2 天蓝色管道的更新文件
- c++ - 为什么我会得到不同的 mask_array 分配行为?
- c++ - 使用 sqlite 数据更新 qtableWidget 内的 qCombobox
- javascript - 使用 create-react-app 构建后的空白页面
- reactjs - 在 React Native 中管理多个模式的最佳实践
- excel - VBA,带有嵌套do while循环的for循环
- javascript - 使用泛型类型扩展接口的打字稿导致约束错误的子类型
- typescript - Typescript 中的类型安全枚举字典
- ios - 有什么方法可以控制 iOS 14 上的本地权限对话框