我已经阅读了一个文本文件并匹配了我感兴趣的数据。我的问题是,操作我匹配的数据的最佳方法是什么? 我正在阅读文本文件的代码是。
self.collectionView?.backgroundColor = UIColor(patternImage: UIImage(named: "image.png")!)
结果现在看起来像:
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter =
"All files (*.*)|*.*";
//dialog.InitialDirectory = "C:\\";
dialog.Title = "Select a text file";
if (dialog.ShowDialog() == DialogResult.OK)
{
string fname = dialog.FileName; // selected file
label1.Text = fname;
if (String.IsNullOrEmpty(richTextBox1.Text))
{
var matches1 = Regex.Matches(System.IO.File.ReadAllText(fname), @"L10 P\d\d\d R \S\S\S\S\S\S\S")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
richTextBox1.Lines = matches1.ToArray();
}
我需要它看起来像这样:
L10 P015 R +4.9025
#2015=4.9025
被排除在外,L10
变为P015
,#2015
和R
变为+
,且数字保持不变。
答案 0 :(得分:1)
使用捕获组:
首先将正则表达式更改为:
L10 P(?<key>\d{3}) R \S(?<val>\S{6})
(?<name>
... )
语法允许您声明命名的捕获组。您可以稍后检索该组匹配的值。
接下来,如果您有匹配对象,则可以使用match.Groups["key"].Value
和match.Groups["val"].Value
提取匹配的组内容,如下所示:
.Select(m => string.Format("#2{0}={1}", m.Groups["key"].Value, m.Groups["val"].Value))
答案 1 :(得分:0)
var matches = Regex.Matches(System.IO.File.ReadAllText(fname), @"L10 P\d\d\d R \S\S\S\S\S\S\S")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
string num1 = "2" + matches[1].Substring(1); // "2" + "015"
string num2 = matches[3].Substring(1); // "4.9025"
string finalValue = "#" + num1 + "=" + num2; // "#2015=4.9025"
richTextBox1.Text = finalValue;
我认为这应该有效,基于你的单个例子。
这假设我们只是总是忽略P015
项的第一个字符和+4.9025
项的第一个字符。
答案 2 :(得分:0)
为什么不简单地拆分接收流,你的规则是基本的,不需要正则表达式。
string receivingStream = "L10 P015 R +4.9025";
string[] tokens = receivingStream.Split(new char[] { ' ' });
答案 3 :(得分:0)
您希望使用Regex.Replace
来改变字符串一次,而不是通过所有这些匹配。您需要将分组添加到正则表达式,并在替换字符串中使用替换。
请参阅: https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx