Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于CSV货币的正则表达式_Java_Regex - Fatal编程技术网

Java 用于CSV货币的正则表达式

Java 用于CSV货币的正则表达式,java,regex,Java,Regex,Hi有一个包含多个值的csv文件。它包含的一个内容是货币栏。该文件的一个示例是: ...,...,...,$100,...,... ...,...,...,$2,500,...,... 我见过正则表达式从每一行中提取货币值。然而,我的问题来了,因为它是一个csv文件,在货币价值中有一个逗号 我的解决方案是对文件进行预处理,查找带有逗号的货币值,然后简单地删除它们。然而,我很难编写一个正则表达式来实现这一点 有人能帮忙吗?只要货币字段后面没有整数字段, 您可以提取货币价值,然后使用回调替换 逗号

Hi有一个包含多个值的csv文件。它包含的一个内容是货币栏。该文件的一个示例是:

...,...,...,$100,...,...
...,...,...,$2,500,...,...
我见过正则表达式从每一行中提取货币值。然而,我的问题来了,因为它是一个csv文件,在货币价值中有一个逗号

我的解决方案是对文件进行预处理,查找带有逗号的货币值,然后简单地删除它们。然而,我很难编写一个正则表达式来实现这一点

有人能帮忙吗?

只要货币字段后面没有整数字段,
您可以提取货币价值,然后使用回调替换
逗号的

这只匹配错误逗号的money字段

 # "\\$(?:\\d+(?:,\\d{3})+(?:\\.\\d*)?)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )+
      (?: \. \d* )?
 )
 # "\\$(?:\\d+(?:,\\d{3})*(?:\\.\\d*)?|\\.\\d+)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )*
      (?: \. \d* )?
   |  \. \d+ 
 )
这与错误或不正确的货币字段相匹配

 # "\\$(?:\\d+(?:,\\d{3})+(?:\\.\\d*)?)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )+
      (?: \. \d* )?
 )
 # "\\$(?:\\d+(?:,\\d{3})*(?:\\.\\d*)?|\\.\\d+)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )*
      (?: \. \d* )?
   |  \. \d+ 
 )
只要money字段后面没有整数字段,
您可以提取货币价值,然后使用回调替换
逗号的

这只匹配错误逗号的money字段

 # "\\$(?:\\d+(?:,\\d{3})+(?:\\.\\d*)?)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )+
      (?: \. \d* )?
 )
 # "\\$(?:\\d+(?:,\\d{3})*(?:\\.\\d*)?|\\.\\d+)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )*
      (?: \. \d* )?
   |  \. \d+ 
 )
这与错误或不正确的货币字段相匹配

 # "\\$(?:\\d+(?:,\\d{3})+(?:\\.\\d*)?)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )+
      (?: \. \d* )?
 )
 # "\\$(?:\\d+(?:,\\d{3})*(?:\\.\\d*)?|\\.\\d+)"

 \$ 
 (?:
      \d+ 
      (?:
           ,
           \d{3} 
      )*
      (?: \. \d* )?
   |  \. \d+ 
 )

如果所有其他字段都是非数字字段,则可以读取整个文件,只匹配数字之间的逗号,然后替换/删除它们。您可以像以下那样使用正则表达式:

(?<=\d)(,)(?=\d)

(?如果所有其他字段都是非数字字段,您可以读取整个文件,只匹配数字之间的逗号,并替换/删除它们。您可以使用regex,如:

(?<=\d)(,)(?=\d)

(?我在Python中测试了这一点,但在Java中也应该是一样的:

r"\$(\d{1,3}(?:,\d{3})*)"
我认为您可能需要加倍使用Java的转义字符。请细分:

\$\匹配美元符号
(#启动组
\d{1,3}#匹配第一组(或唯一一组)1-3位数字,
(?:#启动内部组,我们不会单独捕获它
,#匹配逗号
\d{3}#后跟三位数字
)*#内部组的0个或更多
)#结束语
我在字符串
“…$1000123,…$1”上测试了它,它返回了匹配的组
['1000123','1']
。我希望这能有所帮助

编辑:

在Java中,似乎可以用双反斜杠
“\\”
替换上面的单反斜杠字符

另外,如注释所述,删除字符串前面的
r
,以便在Java中使用,因此在Java中正则表达式是:

pattern = "\\$(\\d{1,3}(?:,\\d{3})*)"

我在Python中对此进行了测试,但在Java中也应该如此:

r"\$(\d{1,3}(?:,\d{3})*)"
我认为您可能需要加倍使用Java的转义字符。请细分:

\$\匹配美元符号
(#启动组
\d{1,3}#匹配第一组(或唯一一组)1-3位数字,
(?:#启动内部组,我们不会单独捕获它
,#匹配逗号
\d{3}#后跟三位数字
)*#内部组的0个或更多
)#结束语
我在字符串
“…$1000123,…$1”上测试了它,它返回了匹配的组
['1000123','1']
。我希望这能有所帮助

编辑:

在Java中,似乎可以用双反斜杠
“\\”
替换上面的单反斜杠字符

另外,如注释所述,删除字符串前面的
r
,以便在Java中使用,因此在Java中正则表达式是:

pattern = "\\$(\\d{1,3}(?:,\\d{3})*)"

货币的正则表达式?现行汇率是多少?这是无效的CSV。CSV中的
$2500
是两个独立的字段,一个包含
$2
,另一个包含
5000
。在你尝试解析CSV之前,你应该修复任何构建此CSV的内容。如果离开Marc B的注释,我会将delimeter从逗号切换到y你知道不会在你的任何领域(像管道一样)或者不要用逗号写你的美元金额。你最好使用
分隔符。如上所述-文件是无效的CSV,但如果其他字段是非数字的,那就另当别论了。货币的正则表达式?现行汇率是多少?这是无效的CSV。
CSV中的
$2500
是两个单独的字段,一个包含
$2
,另一个包含一个其他包含
5000
。您应该在尝试解析它之前修复构建此csv的任何内容。根据Marc B的评论,我会将delimeter从逗号切换到您知道不在任何字段中的内容(如管道|)或者不要用逗号写你的美元金额。你最好使用
分隔符。如上所述-文件是无效的CSV,但如果其他字段是非数字的,那就另当别论了。这是正确的(同时删除字符串前面的r)。+1这是正确的(同时删除字符串前面的r)。+1