我正在使用c#。我需要一个方法,它将一个字符串作为输入,搜索该字符串中的百分比符号,然后直接返回百分比符号前面的数字。例如"asdf sdfa asf 32% asdf"
将返回32. "asdfl asfi asdf kd 34.5% adsfkjfg"
将返回34.5。我知道如何找到百分比符号的索引然后循环向后搜索空格,并返回中间的所有内容。我觉得可能有一种更有效的方法。
答案 0 :(得分:1)
var result = str.Split(' ')
.Where(s => s.Contains('%'))
.Select(s => s.Trim('%'));
<强>解释强>
Split将您的输入字符串转换为IEnumerable<string>
,Where仅选择包含搜索字符%
和Select的每个字符串的字符串,这样新元素不包含字符%
答案 1 :(得分:1)
您可以使用Regular Expression使用以下模式实现此目的:
(^|\s)\d+(.\d+)?(?=%)
在代码中:
var match =
System.Text.RegularExpressions.Regex.Match(input, @"(^|\s)\d+(.\d+)?(?=%)");
if (match.Success)
{
string value = match.Value;
}
这是分解成碎片的模式:
(^|\s
):指定模式的其余部分应该在字符串的开头或白色空间之后。因此,“Hello 3%”将匹配,但“Hello3%”将不会。
\d+
:匹配一个或多个数字。
(.\d+)?
:指定如果有“。”,则还应该有一个或多个十进制数字
(?=%)
:用于匹配“%”的前瞻组并返回在其之前捕获的所有内容(即值)。