我正在尝试从字符串中提取特定的“浮点数”,它包含多种格式的“整数”,“浮点数”和日期。有问题的特定“浮动”以一些标准化的文本为开头。
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
返回Soles
可以是大写/小写:
下面显示的是同一行的三个示例,my_string
中的第二行。尽管有任何变化,例如鞋底或鞋底
非常感谢您提供有关编辑或重写当前正则表达式regex
的任何帮助
答案 0 :(得分:2)
编辑-嗯...如果必须遵循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']
答案 1 :(得分:0)
如果要匹配多个实例,则只需添加g
标志,否则它将仅匹配单个实例。 REGEX
(?<=:)\s?([\d,]*\.\d+)
使用Python
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"(?<=:)\s?([\d,]*\.\d+)"
test_str = ("\n"
" Soles in mDm : 2864.35⬇\n"
" soles MDM: 2,864.35\n"
" Soles in mdm :2,864.355\n")
matches = re.search(regex, test_str, re.IGNORECASE)
if matches:
print ("Match was found at {start}-{end}: {match}".format(start = matches.start(), end = matches.end(), match = matches.group()))
for groupNum in range(0, len(matches.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = matches.start(groupNum), end = matches.end(groupNum), group = matches.group(groupNum)))