如何使用正则表达式从字符串中删除特定格式?

3

我有一个类似这样的字符串列表

$16,500,000(@$2,500)
$34,000(@$11.00)
$214,000(@$18.00)
$12,684,000(@$3,800) 

如何提取这些字符串中的所有符号和(@$xxxx),使它们变得像下面这样

16500000
34000
214000
12684000

提示:将任何非数字的内容[^0-9]替换为空。 - Dan Heberden
2个回答

1
\(.*?\)|\$|,

尝试这个。将其替换为空字符串。请查看演示。

https://regex101.com/r/vD5iH9/42

$re = "/\\(.*?\\)|\\$|,/m";
$str = "\$16,500,000(@\$2,500)\n\$34,000(@\$11.00)\n\$214,000(@\$18.00)\n\$12,684,000(@\$3,800)";
$subst = "";

$result = preg_replace($re, $subst, $str);

0

要删除末尾的(@$xxxx)字符,您可以使用正则表达式:

\(\@\$.+\)

并将其替换为空:

preg_replace("/\(\@\$.+\)/g"), "", $myStringToReplaceWith)

请确保使用 g(全局) 修饰符,以便正则表达式在找到第一个匹配项后不会停止。

以下是该正则表达式的详细说明:

\( 匹配左括号字符
\@ 匹配 @ 字符
\$ 匹配 $ 字符
.+ 匹配任何字符 1 次或多次
\) 匹配右括号字符

这里是 regex101.com 上的实时示例


为了从字符串中删除以下所有字符: $ , ( ) @ .
您可以使用正则表达式:
\$|\,|\(|\)|@|\.

这将匹配上面的所有字符。

上面的|字符是正则表达式的运算符,有效地使得$,()@.都会被匹配。

接下来,你可以使用preg_replace将其替换为空,并且使用g (全局)修饰符,使得正则表达式不会在第一次匹配后返回:

preg_replace("/\$|\,|\(|\)|@|\./g"), "", $myStringToReplaceWith)

这里是regex101.com上的实时示例



最终,你的代码可能会像这样:
$str = preg_replace("/\(\@\$.+\)/g"), "", $str)
$str = preg_replace("/\$|\,|\(|\)|@|\./g"), "", $str)

虽然它不是一个正则表达式,但是它并没有使用任何"look-ahead"或者"look-behind"(顺便说一句,这两个都不错)。

1
谢谢您的回答,但我不需要括号内的任何内容。 - user3571945
看起来我误读了问题。我刚刚更新了答案,使其更加相关(删除也可以,但是不删除它可能会帮助其他查看此问题的人)。@vks在这里给出了更好的答案。 - Jojodmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接