如何使用python3分割字符串

时间:2019-12-06 08:45:53

标签: python regex python-3.x

如何使用正则表达式分割字符串

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))

3 个答案:

答案 0 :(得分:2)

您可以使用

提取字符串
re.findall(r'\d+(?:,\d+)*(?:\.\d{2})?[^,\d]*', text)

请参见regex demo

详细信息

  • \d+-1个以上数字
  • (?:,\d+)*-重复0个或多个逗号和1个以上数字
  • (?:\.\d{2})?-可选的点和两位数字
  • [^,\d]*-除逗号和数字外的0个或多个字符。

Python demo

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();

希望这会有所帮助。