示例
Alarm Level 1 (D1) [Low (15.7)]
Alarm Level 2 [High (-12.7)]
我想从15.7
获得Alarm Level 1
,从-12.7
获得Alarm Level 2
。我尝试使用\((.*?)\)
,但同时获得了D1
和15.7 in Alarm Level 1
。
答案 0 :(得分:2)
处理此问题最简单的方法可能是匹配以下模式:
\[[^(]+\((-?\d+(?:\.\d+)?)\)\]
此处的策略是匹配整个术语,例如[High (-12.7)]
,然后在圆括号内捕获数字。
例如,在Python中,我们可以尝试以下操作:
input = """Alarm Level 1 (D1) [Low (15.7)]
Alarm Level 2 [High (-12.7)]"""
matches = re.findall(r'\[[^(]+\((-?\d+(?:\.\d+)?)\)\]', input)
print(matches)
此打印:
['15.7', '-12.7']
答案 1 :(得分:2)
在这里,我们可以尝试使用一个简单的捕获组来收集数字:
\(([0-9-.]+)\)
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\(([0-9\-\.]+)\)";
string input = @"Alarm Level 1 (D1) [Low (15.7)]
Alarm Level 2 [High (-12.7)]";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
const regex = /\(([0-9-.]+)\)/gm;
const str = `Alarm Level 1 (D1) [Low (15.7)]
Alarm Level 2 [High (-12.7)]`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
jex.im可视化正则表达式:
答案 2 :(得分:0)
使用正则表达式,其模式为:
[\ w + \ s \([\ d .-] + \)]
通过匹配来匹配“ [低(15.7)]”或“ [高(-12.7)]”
a。 “ [”&“]” 匹配方括号
b。 “ \ w +” 匹配一个或多个单词(在这种情况下为“低”或“高”)
c。 “ \ s” 匹配单个空格
d。 “ \(”&“ \)” 匹配括号e。 [\ d .-] + 匹配数字的组合“。”。 &“-”
后跟以下模式:
[\ d .-] +
获取所需的值
源代码:
static void Main(string[] args)
{
string input = "Alarm Level 1 (D1) [Low (-15.7)]";
string pattern = @"\[\w+\s\([\d.-]+\)\]";
string outputA = Regex.Match(input, pattern).Value;
string outputB = Regex.Match(outputA, @"[\d.-]+").Value;
Console.WriteLine("A: " + outputA);
Console.WriteLine("B: " + outputB);
Double intOutput = Convert.ToDouble(outputB);
Console.ReadLine();
}