Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
C# 正则表达式查找具有实际数学值的百分号_C#_.net_Regex_Vb.net_Replace - Fatal编程技术网

C# 正则表达式查找具有实际数学值的百分号

C# 正则表达式查找具有实际数学值的百分号,c#,.net,regex,vb.net,replace,C#,.net,Regex,Vb.net,Replace,我有一个类似于30+20%的字符串。现在我想用(20/100)替换20%。就是这样。这应该是一个很容易尝试的正则表达式。1到3位数字,后跟百分号。 您需要捕获1-3位数字组以进行反向引用,并使用它创建 (数字/100)字符串。 你可以在这里玩:http://gskinner.com/RegExr/ 要学习正则表达式。如果百分比在字符串中的任何其他情况下都不出现,则甚至不需要正则表达式: string s="30+20%"; s=s.Replace("%","/100)"); s=s.Replac

我有一个类似于
30+20%
的字符串。现在我想用
(20/100)
替换
20%
。就是这样。

这应该是一个很容易尝试的正则表达式。1到3位数字,后跟百分号。 您需要捕获1-3位数字组以进行反向引用,并使用它创建 (数字/100)字符串。
你可以在这里玩:http://gskinner.com/RegExr/ 要学习正则表达式。

如果百分比在字符串中的任何其他情况下都不出现,则甚至不需要正则表达式:

string s="30+20%";
s=s.Replace("%","/100)");
s=s.Replace("+","+(");
s = s.Replace("%", "/100");
要添加括号,您需要正则表达式:

s = Regex.Replace(s, @"(\d{1,3})%", "($1/100)");

我假设您运行Perl

input="30+20%"
echo $input | perl -pe 's#(\d+)%#\($1/100\)#g'

编辑:只需阅读标记,无论如何,正则表达式应该在C#

中工作,我不确定您使用的是什么编程语言,但在python中您将这样做:

import re
re.sub(r'(\d*)%', r'\1/100', '30+20%')
返回的字符串将是“30+20/100”

说明: 让我们看看正则表达式。r'\d*%'是一个正则表达式,它匹配后跟%符号的一系列数字。我放置(\d*)来告诉regex编译器数字序列(也称为数字)是第一组。第二个arguemnt告诉子函数如何替换匹配的字符串。参数“\1/100”告诉子函数我希望它将匹配的字符串替换为正则表达式匹配的第一个组的值(通过\1部分),后跟/100


您可以查看以了解更多信息。

试试这个

string resultString = null;
try {
    resultString = Regex.Replace(subjectString, @"\b(\d+)%", "($1/100)");
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

你不能简单地使用
yourString.Replace(“%”,“/100”)?@Marco我需要括号。如果您使用的是数学处理器,除法的优先级高于求和,因此不必添加括号。无论如何,@Guffa的答案就是你需要的。@Marco我完全同意。可能是重复的,我只是在问题上加了一个“谢谢Guffa”的标签。帮了我很多忙。@Guffa只是想问一下,如果我把表达式改成
30+20.33%
,会怎么样。你的答案似乎对这些不起作用。@SohamDasgupta:
\d
[0-9]
只对数字有效,对于浮点数,你还必须包括十进制分隔符:
[\d\.]
@Guffa我想出了
\d+(\.\d{1,3})
。匹配正常,但替换逻辑
($1/100)
使其看起来像
30+(.33/100)%
。我脑子里只少了这一点。我必须说小数点是可选的。因此正则表达式应该同时适用于
10+8.33%
和“30+20%”,在替换后,它应该是
10+(8.33/100)
30+(20/100)
。我的正则表达式对这两个字符串都足够了吗?@SohamDasgupta:我认为
(\d{1,3}(?:\.\d{1,2})%
更好,因为它不会对
12345%
1..2%
这样的字符串给出误报,对给定的字符串效果很好,但它会弄乱字符串,比如
“30-20%”
30+20”