我有一个字符串
99CZIAKUOTA PIV 1,21 SUMA 12,36otóuka2| 0350 | tKasa 1
我希望在单词 SUMA 之后得到第一个十进制数字(用逗号)(SUMA和数字之间可能会有更多单词)
12,36
实现这一目标的最简单方法是什么?
答案 0 :(得分:1)
您不需要正则表达式*。简单的子串和删除可以做得很好 这是我快速掀起的事情。
string test = "Ł9CZIA KUOTA PIV 1,21 SUMA 12,36 otóuka 2 | 0350 |tKasa 1";
test = test.Substring(test.IndexOf("SUMA ") + 5);
test = test.Remove(test.IndexOf(' '));
可能会以某种方式简化,但它可以解决问题。如果您需要的结果实际属于decimal
类型,那么您当然需要进行转换。
*请注意,这并不能保证您有一个号码(例如,如果输入错误),那么您需要验证它。
由于您编辑了帖子以添加这样一个事实,即在我发布答案后,SUMA和号码之间可能有多个单词,我不会在此明确处理。在这种情况下,我认为正则表达式更有意义。
答案 1 :(得分:1)
如果SUMA和数字之间可以有单词,您可以匹配任何字符零次或多次非贪婪.*?
,然后在组(\d+,\d+)
中捕获
string pattern = @"SUMA.*? (\d+,\d+)";
string input = @"Ł9CZIA KUOTA PIV 1,21 SUMA test 12,36 otóuka 1,1 2 | 0350 |tKasa 1";
Regex r = new Regex(pattern);
Match match = r.Match(input);
Console.WriteLine(match.Groups[1]); // 12,36
答案 2 :(得分:0)
将正则表达式 6 # 'pages' is the number of pages in the pdf
7 filepath = pdfPath.rsplit('/', 1)[0]
----> 8 filename = pdfPath.rsplit('/', 1)[1]
9
10 #print pdf to jpg using jpg printer
(Regexr link)与捕获组(SUMA (\d+,\d+)
)一起使用。类似的东西:
?<capture>
答案 3 :(得分:0)
我可以看到你想要找到 SUMA 这个词,然后跳过空格,然后得到一个带有可能小数部分的数字。
/SUMA\s+(\d+(?:,\d+)?)/
答案 4 :(得分:0)
使用代码:
string str = "Ł9CZIA KUOTA PIV 1,21 SUMA 12,36 otóuka 2 | 0350 |tKasa 1";
int index = str.IndexOf("SUMA");
if (index > -1)
{
str = str.Substring(index + 5);// SUMA + SPACE char == 4+1 = 5
int inx = str.IndexOf(" ");
if (index > -1)
{
str = str.Substring(0, inx);
Console.WriteLine(str.Trim());
}
}
答案 5 :(得分:0)
如果你需要一个逗号,你应该使用类似的东西:
SUMA\s(\d+,\d+[^\s])
答案 6 :(得分:0)
使用以下代码:
string str ="Ł9CZIA KUOTA PIV 1,21 SUMA 12,36 otóuka 2 | 0350 |tKasa 1";
var sentences = new List<String>();
int position = 0, start = 0;
do{
position = str.IndexOf("SUMA", start);
if (position >= 0){
str = str.Substring(position).Trim();
start += 5;
position = str.IndexOf("SUMA", start);
if (position >= 0){
string _str = str.Substring(0,position).Trim();
sentences.Add(_str);
str = str.Substring(position).Trim();
start = 0;
}
else
sentences.Add(str);
}
} while (position > 0);
// Extract decimal
string pattern = @"(\d+,\d+)";
Regex r = new Regex(pattern);
foreach (var sentence in sentences){
Match match = r.Match(sentence);
Console.WriteLine(match.Groups[1]);
}