【发布时间】:2020-08-16 20:57:58
【问题描述】:
我有一个 XML 文件,其中多次包含以下字符串:
<Name Area="" Title="@(String) - @(I am) - @(looking) - @(for)" ...</Name>
我想做的是用正则表达式搜索这些字符串,切掉 @() 并将其余部分保存在新的文本文件中。 我已经设法找到与该字符串匹配的模式,计算该模式与该字符串匹配的频率,但我未能挑选和操作它们。
我在 Windows 窗体应用程序中完成所有这些工作。
编辑:
莫顿·博克:
到目前为止,我唯一能做的就是让用户选择要处理的文件以及保存新文件的位置。它正在这样做。我对使用正则表达式的想法失败了。
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Text.RegularExpressions;
namespace Movitool
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static class Globals
{
public static string AlrFile = string.Empty;
public static string AlrFileNeu = string.Empty;
}
private void btnPfadAuswahl_Click(object sender, EventArgs e)
{
using (OpenFileDialog fileDialog1 = new OpenFileDialog())
{
fileDialog1.Filter = "movalr files (*.movalr)|*.movalr";
fileDialog1.RestoreDirectory = true;
fileDialog1.InitialDirectory = @"Dokumente\";
if (fileDialog1.ShowDialog() == DialogResult.OK)
{
Globals.AlrFile = fileDialog1.FileName;
txtPfad.Text = Globals.AlrFile;
}
}
}
private void btnStartAlr_Click(object sender, EventArgs e)
{
string pattern = @"@(.*?)";
Regex rgx = new Regex(pattern);
using (SaveFileDialog fileDialog2 = new SaveFileDialog())
{
fileDialog2.InitialDirectory = @"Dokumente";
fileDialog2.Title = "Save File";
fileDialog2.Filter = "txt files (*.txt)|*.txt";
if(fileDialog2.ShowDialog() == DialogResult.OK)
{
Globals.AlrFileNeu = fileDialog2.FileName;
}
}
foreach(string Line in File.ReadLines(Globals.AlrFile))
{
File.AppendAllText(Globals.AlrFileNeu, Line + Environment.NewLine);
}
lblStatus.Text = "Fertig!";
}
}
}
【问题讨论】:
-
您是否使用 RegEx 搜索 XML? IMO,最好将 XML 转储到
XDocument,将字符串(在您的 sn-p 中它们是 Title 属性的值)提取到集合中,然后对字符串中的字符串执行 RegEx收藏。 -
您需要展示您的尝试,提供足够的代码来复制您的问题等。请查看“如何提问”部分。