如何使用正则表达式分割字符串
input :
result = '1,000.03AM2,97.2323,089.301,903.230.0034,928.9911,24.30AM'
想要将其拆分,以便我可以将其存储为不同的字符串以供进一步使用,如下所示
o/p should be :
a = 1,000.03AM, b = 2,97.23, c = 23,089.30, d = 1,903.23, e = 0.00, f = 34,928.99, g = 11,24.30AM
我已经尝试过了,但是它显示了错误的输出
import re
print(re.findall(r'[0-9.]+|[^0-9.]', result))
答案 0 :(得分:2)
您可以使用
提取字符串re.findall(r'\d+(?:,\d+)*(?:\.\d{2})?[^,\d]*', text)
请参见regex demo
详细信息
\d+
-1个以上数字(?:,\d+)*
-重复0个或多个逗号和1个以上数字(?:\.\d{2})?
-可选的点和两位数字[^,\d]*
-除逗号和数字外的0个或多个字符。import re
text = "1,000.03AM2,97.2323,089.301,903.230.0034,928.9911,24.30AM"
print( re.findall(r'\d+(?:,\d+)*(?:\.\d{2})?[^,\d]*', text) )
# => ['1,000.03AM', '2,97.23', '23,089.30', '1,903.23', '0.00', '34,928.99', '11,24.30AM']
答案 1 :(得分:2)
要获得结果,您需要使用以下正则表达式:
re.findall(r"[\d,]+\.\d{2}(?:AM)?", result)
产生以下结果:
['1,000.03AM', '2,97.23', '23,089.30', '1,903.23', '0.00', '34,928.99', '11,24.30AM']
正则表达式说明:
[\d,]
-匹配数字和逗号[\d,]+\.\d{2}
-匹配整个float值(点后有两个摘要)(?:AM)?
-匹配非捕获组中的可选AM
,在下面的示例中,我使用(?=AM)?
将其不包括在结果中AM
上还有其他地方,可以将(?:AM)
修改为(?:AM|Other|...)
如果您需要将其解析为float,那么我有两个建议。首先是删除逗号:
map(lambda x: float(x.replace(",", "")), re.findall(r"[\d,]+\.\d{2}(?=AM)?", s))
结果:
[1000.03, 297.23, 23089.3, 1903.23, 0.0, 34928.99, 1124.3]
另一个变种正在使用locale
:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF8')
'en_US.UTF8'
>>> list(map(lambda x: locale.atof(x), re.findall(r"[\d,]+\.\d{2}(?=AM)?", s)))
[1000.03, 297.23, 23089.3, 1903.23, 0.0, 34928.99, 1124.3]
答案 2 :(得分:0)
如果字符串长度及其参数保持不变,则提供。 最有效的解决方案是。
$url = 'http://outsource.gestionminute.com/htmltopdf/form/test.html';
$html = file_get_contents($url);
$mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4-L']);
$mpdf->WriteHTML($html);
$mpdf->Output();
希望这会有所帮助。