我正在使用正则表达式构建文本解析器.我需要将字符串中的所有制表符转换为空格字符.我不能假设标签应该包含多少空格,否则我可以用4个空格字符替换标签.对于这类问题有没有好的解决方案.我需要在代码中执行此操作,因此我无法使用外部工具.
不幸的是,这些答案都没有解决我遇到的问题.我从外部文本文件中提取文本,我无法假设它们是如何创建的,或者是用于创建它们的操作系统.我相信制表符的长度可能会有所不同,所以如果我在阅读文本文件时遇到标签,我想知道应该用多少空格字符替换它.
Gat*_*ler 16
不幸的是,您需要假设选项卡代表多少空格.您应该将其设置为固定值(如上面提到的四个)或将其设置为用户选项.
最快的方法是.NET(我正在使用C#):
var NewString = "This is a string with a    Tab";
var TabLength = 4;
var TabSpace = new String(' ', TabLength);
NewString = NewString.Replace("\t", TabSpace);
然后,您可以将TabLength变量更改为您想要的任何内容,通常如前所述,四个空格字符.
所有操作系统中的选项卡长度相同,一个选项卡!不同的是软件显示它们的方式,通常这是四个空格字符的等效宽度,这也假设显示器使用固定宽度字体,如Courier New.
例如,我选择的IDE允许我将制表符的宽度更改为适合我的值.
我不确定标签是如何从Unix文本文件中读取的,或者您的各种格式是什么,但这适用于内联文本.也许它会有所帮助.
var textWithTabs = "some\tvalues\tseperated\twith\ttabs";
var textWithSpaces = string.Empty;
var textValues = textWithTabs.Split('\t');
foreach (var val in textValues)
{
    textWithSpaces += val + new string(' ', 8 - val.Length % 8);
}
Console.WriteLine(textWithTabs);
Console.WriteLine(textWithSpaces);
Console.Read();
Miy*_*der -1
您可以使用替换功能:
char tabs = '\u0009';
String newLine = withTabs.Replace(tabs.ToString(), "    ");