I have the following string as input :
\"2.0,3.00,-4.0,0.00,-0.00,0.03,2.01,0.001,-0.03,101\"
Final output will be like :
UPDATE to cover more cases such as 01.
,.100
, 01.10
(?<=,|^)(?:[0.+-]+(?=0(?:,|\.\B|$))|0+(?=[1-9]))|\.0+\b|\b0+(?=\d*\.\b)|\.\B|(?<=[1-9])0+(?=,|$)
This pattern requires more backtracking, thus can get slower on large input. Java String:
"(?<=,|^)(?:[0.+-]+(?=0(?:,|\\.\\B|$))|0+(?=[1-9]))|\\.0+\\b|\\b0+(?=\\d*\\.\\b)|\\.\\B|(?<=[1-9])0+(?=,|$)"
In addition to the previous pattern this one matches
(?<=,|^)(?:
...|0+(?=[1-9]))
add leading zeros preceding [1-9]
\.0+\b
modified to match period with zeros only before a word boundary\b0+(?=\d*\.\b)
match zeros at boundary if period preceded by optional digits ahead\.\B
matches a period bordering to a non word boundary (eg .,
)(?<=[1-9])0+(?=,|$)
matches trailing zeros following [1-9]
Demo at regex101 or Regexplanet (click Java)
Answer before update
You can also try replaceAll
this regex with empty.
(?<=,|^)[0.+-]+(?=0(?:,|$))|\.0+\b|\b0+(?=\.)
(?<=,|^)[0.+-]+(?=0(?:,|$))
matches all parts that consist only of [0.+-]
with at least a trailing zero. Limited by use of lookaround assertions: (?<=,|^)
and (?=0(?:,|$))
|\.0+\b
or match a period followed by one or more zeros and a word boundary.
|\b0+(?=\.)
or match a boundary followed by one or more zeros if a period is ahead.
Unquestioned cases like 0.
,01
,1.10
are not covered by this pattern yet. As a Java String:
"(?<=,|^)[0.+-]+(?=0(?:,|$))|\\.0+\\b|\\b0+(?=\\.)"
Demo at regex101 or Regexplanet (click Java)