我有一个文本文件,我想从中将Keys
和Values
存储在String
数组中。
在这种情况下,Key
类似于“ 输入文件”,而Value
则是“ 'D:\ myfile.wav' ”。我用**:**
字符分割文本文件行。但是,我只想将拆分限制为仅**:**
的第一次出现。
这是我的代码:
输入文件:'D:\ myfile.wav'
持续时间:00:00:18.57
if (Regex.IsMatch(line, @"[^0-9\p{L}:_ ]+", RegexOptions.IgnoreCase))
{
string[] dataArray = line.Split(':');
}
答案 0 :(得分:4)
使用正则表达式捕获
private static Regex _regex = new Regex(@"^([\p{L}_ ]+):?(.+)$");
....
Match match = _regex.Match(line);
if (match.Success)
{
string key = match.Groups[1].Captures[0].Value;
string value = match.Groups[2].Captures[0].Value;
}
regexp是静态成员,以避免每次使用时都对其进行编译。表达式中的?
用于强制执行懒惰行为(默认为贪婪)并匹配第一个:
。
在您发表评论后,我已经更新了代码并进行了改进。我认为这就是您的意思:
键:任何字母,下划线和空格组合(无数字) 价值:任何 键和值之间的分隔符::
答案 1 :(得分:2)
基本上,您不想拆分整个字符串,而是在遇到第一个':'char加一个符号(':'本身)之前跳过所有内容。
var data = line.Substring(line.IndexOf(':') + 1);
或者如果您真的想要使用Split解决方案:
var data = string.Join(":", line.Split(':').Skip(1));
在这里,我们首先将字符串拆分为数组,然后跳过一个元素(我们试图摆脱的一个元素),最后在数组中的元素之间构造一个带有':'的新字符串。
答案 2 :(得分:0)
这是使用正则表达式(代码注释)的一种方法:
string[] lines = {@"Input File : 'D:\myfile.wav'", @"Duration: 00:00:18.57"};
Regex regex = new Regex("^[^:]+");
Dictionary<string, string> dict = new Dictionary<string, string>();
for (int i = 0; i < lines.Length; i++)
{
// match in the string will be everything before first :,
// then we replace match with empty string and remove first
// character which will be :, and that will be the value
string key = regex.Match(lines[i]).Value.Trim();
string value = regex.Replace(lines[i], "").Remove(0, 1).Trim();
dict.Add(key, value);
}
它使用模式^[^:]+
,这是一种否定类技术,可以匹配所有内容,除非指定了字符。
答案 3 :(得分:0)
通过这种方式,您可以读取文本文件的每一行。您用Key =填充json,直到“:” Value =从“:”
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
def formattedDate = new Date().format('yyMMdd')
outputFileName = "${outputFileName.replace(".apk","")}-v${defaultConfig.versionCode}-${formattedDate}.apk"
}
}
}
答案 4 :(得分:0)
您需要将看跌期权信息读取到String Line
之后,执行此操作。
String Key = Line.Split( ':' )[0];
String Value = Text.Substring( Key.Length + 1, Text.Length - Property.Length - 1 );