java - 正则表达式:复数

标签 java regex parsing

问题:这是我的虚数正则表达式:

[0-9]{0,}\d\.[0-9]{0,}\d[i]|[0-9]{0,}\d[i]

它只取一个纯复数部分的虚数。

当我的解析器遇到例如String im = "2i";时,它被转换为String z = "complex(0, 2)"//complex(re, im) - 像这样:

Matcher m = pattern.regex.matcher(exp);     //String exp = "2i + 5"

if(m.find())
{
  String key = m.group();                   //String key = "2i"
  int type = pattern.token;

   if(type == COMPLEX) 
   {
    key = key.replaceAll("i", "");          // key = "2"
    exp = m.replaceFirst("");               // exp = "5"
    exp = "complex(0," + key +")" + exp;    //exp = "complex(0,2) + 5"
   }

   return exp;
}

我能以某种方式一次用正则表达式做到这一点吗?例如,任何后跟字母“i ”的十进制数都将转换为另一个字符串 - complex(0, number) ?

最佳答案

下面是您可能想尝试的示例,使用 String#replaceAll:

// testing integers, comma-separated and floats
String test = "1 * 2i + 3.3i / 4.4 ^ 5,555i * 6,666 + 7,777.7i / 8,888.8";
System.out.println(
    test
    .replaceAll(
       //| group 1: whole expression
       //| | any 1+ digit
       //| |  | optional comma + digits
       //| |  |       | optional dot + digits
       //| |  |       |         | final "i"
        "(\\d+(,\\d+)?(\\.\\d+)?)i", 
        "complex(0, $1)"
    )
);

输出

1 * complex(0, 2) + complex(0, 3.3) / 4.4 ^ complex(0, 5,555) * 6,666 + complex(0, 7,777.7) / 8,888.8

注意

如果逗号部分会干扰您的函数表达式(即 complex(0, 1,2) 可能是个问题)您可以:

  • 删除那部分模式,或者
  • 在替换中用一些定界符包围反向引用,例如"complex(0,\"$1\")"

关于java - 正则表达式:复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30356681/

相关文章:

java - 计算具有已知频率的 3 个或更多属性的方差

mysql - 将 Rails 路由中的参数限制为 INT(11) 范围

php - 使用 PHP Simple HTML DOM Parser 查找带有类的 div

scala - 将字符串转换为列表的列表

java - 在 Sax XML 解析器中获取父子层次结构

java - Tomcat context.xml 文件,是否有层次结构?

java - 简单的Java api来形成和发送ntp数据包

java - 获取 Java 小程序的屏幕截图

java - 使用正则表达式解析日期

java - 去除字符串中的重复字符