Php Regex大师!这里';这是一个难题:混合了数千个分隔符和csv';s
我有一根像Php Regex大师!这里';这是一个难题:混合了数千个分隔符和csv';s,php,regex,Php,Regex,我有一根像 "labour 18909, liberals 12,365,conservatives 14,720" …我想要一个正则表达式,它可以去掉任何数千个分隔符,这样我就可以轻松地提取数字。甚至是一个正则表达式,它可以给我一个整洁的数组,比如: (labour => 18909, liberals => 12365, conservatives => 14720) 哦,我希望我有时间弄清楚正则表达式!也许我会买一本作为厕纸,嗯。您可以搜索并替换为sed: >
"labour 18909, liberals 12,365,conservatives 14,720"
…我想要一个正则表达式,它可以去掉任何数千个分隔符,这样我就可以轻松地提取数字。甚至是一个正则表达式,它可以给我一个整洁的数组,比如:
(labour => 18909, liberals => 12365, conservatives => 14720)
哦,我希望我有时间弄清楚正则表达式!也许我会买一本作为厕纸,嗯。您可以搜索并替换为sed:
> echo '"labour 18909, liberals 12,365,conservatives 14,720"'
| sed -r -e 's/([0-9]),([0-9]{3})/\1\2/g'
"labour 18909, liberals 12365,conservatives 14720"
我不完全确定PHP语法是什么,但它基本上采用了一个由一个数字(X)、一个逗号和三个其他数字(Y)组成的模式,并用XY位替换它们。您可以进行搜索并替换,例如使用sed:
> echo '"labour 18909, liberals 12,365,conservatives 14,720"'
| sed -r -e 's/([0-9]),([0-9]{3})/\1\2/g'
"labour 18909, liberals 12365,conservatives 14720"
我不完全确定PHP语法是什么,但它基本上采用由一个数字(X)、一个逗号和其他三个数字(Y)组成的模式,并用XY位替换它们。好的,使用以下正则表达式可以将数字与其他数字分开:
labour\s*([\d,.]+),\s*liberals\s*([\d,.]+),\s*conservatives\s*([\d,.]+)
毕竟,一个数字显然在一个不再有数字跟随的点结束。然后可以继续从值中删除逗号
PowerShell演示(有点精简,抱歉):
PS Home:\>$s-match'labour\s*(?[\d,.]+),\s*liberals\s*(?[\d,.]+),\s*保守派\s*(?[\d,.]+)'|
出空
PS Home:\>“劳工:{0}`nLiberals:{1}`nConservatives:{2}”-f`
($Matches['labour'],$Matches['liberals'],$Matches['conservators']|
foreach{$\替换','})
劳工:18909
自由派:12365
保守党:14720
好的,使用以下正则表达式可以将数字与其他数字分开:
labour\s*([\d,.]+),\s*liberals\s*([\d,.]+),\s*conservatives\s*([\d,.]+)
毕竟,一个数字显然在一个不再有数字跟随的点结束。然后可以继续从值中删除逗号
PowerShell演示(有点精简,抱歉):
PS Home:\>$s-match'labour\s*(?[\d,.]+),\s*liberals\s*(?[\d,.]+),\s*保守派\s*(?[\d,.]+)'|
出空
PS Home:\>“劳工:{0}`nLiberals:{1}`nConservatives:{2}”-f`
($Matches['labour'],$Matches['liberals'],$Matches['conservators']|
foreach{$\替换','})
劳工:18909
自由派:12365
保守党:14720
您想要的似乎是仅在逗号被数字包围时删除它们。
抱歉,我不知道PHP正则表达式语法的细节,但是下面是几个更抽象的示例
str.replace("(\d+),(\d+)", "$1$2")
s/([0-9]+),([0-9]+)/\1\2/g
这些将得到所有正确的数字,但也会得到一些不正确的数字,例如“2,41,11”您想要的似乎是删除逗号,如果它们被数字包围。 抱歉,我不知道PHP正则表达式语法的细节,但是下面是几个更抽象的示例
str.replace("(\d+),(\d+)", "$1$2")
s/([0-9]+),([0-9]+)/\1\2/g
这些将得到所有正确的数字,但也会得到一些不正确的数字,例如“2,41,11”两行。还将获得独立候选人:
preg_match_all('/([a-zA-Z]+)\s*([\d,]+)(?:,|$)/', $str, $matches);
$totals = array_combine($matches[1], $matches[2]);
/* total:
Array
(
[labour] => 18909
[liberals] => 12,365
[conservatives] => 14,720
)
*/
两个班轮。还将获得独立候选人:
preg_match_all('/([a-zA-Z]+)\s*([\d,]+)(?:,|$)/', $str, $matches);
$totals = array_combine($matches[1], $matches[2]);
/* total:
Array
(
[labour] => 18909
[liberals] => 12,365
[conservatives] => 14,720
)
*/
在以前的生活中,我做了很多像这样的数据处理,除了有上亿条记录需要几天才能处理 我总是发现遵循这个策略是明智的
在以前的生活中,我做了很多像这样的数据处理,除了有上亿条记录需要几天才能处理 我总是发现遵循这个策略是明智的