我正在尝试使用正则表达式来查找字符串中的BELL字符对。
我的问题是,根据我目前的解决方案,我会 - 如果我有6个贝尔字符接着找到1和2,3和4,5和6之间的匹配但我还需要找到2和3是一对我已经从regex.com上了解了它的样子,这可能会让我的挑战变得非常明显。
我意识到我可以为每个Bell拆分字符串并循环遍历结果并检查每个空的实例,但由于我将处理相当大的文件,我认为正则表达式可能更有效。
目的是能够用其他东西替换空值。我无法在此表单字段中编写BELL,但在下面的示例中,我使用.
来表示BELL。输入可以是.0......2.
,我想提出.0.999.999.999.999.999.2.
,但目前我正在0..999..999..999.2.
。
代码是这样的:
var lines = File.ReadAllLines(dir + "Temp5\\" + filname + ".csv");
using (var sw = new StreamWriter(dir + "Final\\" + filname + ".csv"))
{
foreach (string line in lines)
{
cleanline = Regex.Replace(line, @"", "999");
sw.WriteLine(line2);
}
}
答案 0 :(得分:1)
您可以使用积极的外观使其发挥作用:
{{1}}
https://regex101.com/r/tSJLZF/1
正面观察(?< =·)
断言下面的正则表达式匹配 ·匹配字符·字面上(区分大小写) ·匹配字符·字面上(区分大小写)
答案 1 :(得分:0)
您需要将6个铃声块与"(?<!\a)\a{6}(?!\a)"
等正则表达式匹配,然后在匹配评估器中的每个字符之间插入999
。
<强>详情:
(?<!\a)
- (负面的背后)在当前位置之前必须没有钟形字符\a{6}
- 6个钟形字符(?!\a)
- (负向前瞻)当前位置后必须没有贝尔字符查看demo(但使用点以获得更好的可见性):
using System;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var line = " .2 1..2 .0......2.";
Console.WriteLine(Regex.Replace(line, "(?<!\\.)\\.{6}(?!\\.)",
m => string.Join("999", m.Value.Select(Char.ToString)) ));
}
}
要在每个钟形字符后面加上999
,请使用
cleanline = Regex.Replace(line, "\a(?=\a)", "$&999")
答案 2 :(得分:0)
如果输入字符串中存在未知数量的铃声字符,并且您想在相邻的铃声字符之间插入999
,那么一种简单的方法就是使用string.Replace
方法。
下面的代码使用分号(即;
)而不是铃号。
char bellCharacter = ';';
string twoAdjacentBells = new string(bellCharacter, 2);
string twoBellsWith999 = bellCharacter + "999" + bellCharacter;
string inputLine = "abc;;def;;;;ghi";
string outputLine = inputLine
.Replace(twoAdjacentBells, twoBellsWith999)
.Replace(twoAdjacentBells, twoBellsWith999);
需要两次调用Replace
才能正确处理三个相邻的铃声字符。
另一种方法是将输入字符串拆分为贝尔字符,扫描结果字符串列表,用999
替换空字符串,然后重新组合。代码类似于:
string oneBell = new string(bellCharacter, 1);
string[] pieces = inputLine.Split(bellCharacter);
for (int ii=0; ii<pieces.Count(); ii++)
{
if (string.IsNullOrEmpty(pieces[ii]))
{
pieces[ii] = "999";
}
}
string anotherOutputLine = string.Join(oneBell, pieces);