用python正则表达式替换字符串问题 我用python写一个计算器,想用正则表达式将字符串中的一些内容替换,

举个例子字符串如下1+2*3-(5/6)+sin(45)-ln(100)如何用正则表达式先找到其中有sin()的内容,然后将sin(45)这个子串提取出来算出其值,然后用... 举个例子字符串如下
1+2*3-(5/6)+sin(45)-ln(100)
如何用正则表达式先找到其中有sin()的内容,然后将sin(45)这个子串提取出来算出其值,然后用值去替换字符串中sin(45)
展开
 我来答
紫薇参星
科技发烧友

2017-03-28 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3661万
展开全部

先用正则表达式 sin\((\d+(\.\d+)?)\)  取第一捕获组的数据

把sin(45)中的角度值angle匹配出来,然后计算出sin(angle)的值value,

最后用正则表达式 "sin\("+angle+"\)" 替换成String.valueOf(value) //value的字符串形式

我给你一个完整的Java语言的例子,你看看吧.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AA {
 public static void main(String[] args) {
  String s="1+2*3-(5/6)+sin(45)-ln(100)";
  String regex="sin\\((\\d+(\\.\\d+)?)\\)";
  Pattern p=Pattern.compile(regex);
  Matcher m=p.matcher(s);
  while(m.find()){
   String angle=m.group(1);//取出sin函数的角度值
   double d=Double.parseDouble(angle);//把角度值转换成double型
   double value=Math.sin(d/180*Math.PI);//把角度值转换成弧度值然后计算sin函数值
   s=s.replaceAll("sin\\("+angle+"\\)", String.valueOf(value));//把相应的sin(45)字符串替换成sin函数值
   System.out.println(s);//输出结果,你也可以在程序最后输出结果,也就是在while循环完成后输出结果
  }
 }
}

运行结果

1+2*3-(5/6)+0.7071067811865475-ln(100)

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式