使用正则表达式(.net)的字符串中的值
我正在尝试获取这些值使用正则表达式(.net)的字符串中的值,.net,regex,.net,Regex,我正在尝试获取这些值 Title: some, song title Length: 5:35 Rating: 0 Genre: Other Size: 7.6 MB 从一个字符串,但我需要它,以便他们可以放置在任何地方的字符串,例如 Title: some, song title, Length: 5:35, Rating: 0, Genre: Other, Size: 7.6 MB Size: 7.6 MB, Title: some, song title, Length: 5:35, G
Title: some, song title
Length: 5:35
Rating: 0
Genre: Other
Size: 7.6 MB
从一个字符串,但我需要它,以便他们可以放置在任何地方的字符串,例如
Title: some, song title, Length: 5:35, Rating: 0, Genre: Other, Size: 7.6 MB
Size: 7.6 MB, Title: some, song title, Length: 5:35, Genre: Other, Rating: 0
两者都会返回上面的值吗
谢谢这对解析器来说比正则表达式更重要。您可以在字符串的空格上拆分字符串,并通过查找冒号和计算值来循环。在这里使用正则表达式要么效率低下,要么会让你发疯。对于解析器来说,这比正则表达式更像是一项工作。您可以在字符串的空格上拆分字符串,并通过查找冒号和计算值来循环。在这里使用regex要么效率低下,要么让你发疯。你能控制输入字符串的格式吗?如果是,则将其更改为:
标题:一些,歌曲标题;长度:5:35;评分:0分代码>
使用代码>而不是,
。您可以拆分字符串:
string[]parts=input.Split(“;”)代码>
并单独处理部件。在这种情况下,不要浪费时间在正则表达式上。您能控制输入字符串的格式吗?如果是,则将其更改为:
标题:一些,歌曲标题;长度:5:35;评分:0分代码>
使用代码>而不是,
。您可以拆分字符串:
string[]parts=input.Split(“;”)代码>
并单独处理部件。在这种情况下,不要浪费时间在正则表达式上。好吧,您可以这样做:
/Title: (.*?)(?=,\s\w+:|$)/ Song Title
/Length: (\d+:\d+)/ Length
/Rating: (\d+)/ Rating
/Genre: (.*?)(?=,\s\w+:|$)/ Genre
/Size: (\d+(?:\.\d)?+\s\w+)/ Size
(?=,\s\w+:|$)
模式只是确保它只获取“字段”的值(即,在行尾或下一个分组处停止)。您可以这样做:
/Title: (.*?)(?=,\s\w+:|$)/ Song Title
/Length: (\d+:\d+)/ Length
/Rating: (\d+)/ Rating
/Genre: (.*?)(?=,\s\w+:|$)/ Genre
/Size: (\d+(?:\.\d)?+\s\w+)/ Size
(?=,\s\w+:|$)
模式只是确保它只获取“字段”的一个值(即在行尾或下一个分组处停止)。我不会使用正则表达式,而是使用正则表达式
string input =
"Title: some, song title; Length: 5:35; Rating: 0; Genre: Other; Size: 7.6 MB";
var values = input.Split(new[] { "; " }, StringSplitOptions.None)
.Select(v => v.Split(new[] { ": " }, StringSplitOptions.None))
.ToDictionary(v => v[0], v => v[1]);
我不得不将分隔符改为分号而不是逗号。我不会使用正则表达式,而是使用
string input =
"Title: some, song title; Length: 5:35; Rating: 0; Genre: Other; Size: 7.6 MB";
var values = input.Split(new[] { "; " }, StringSplitOptions.None)
.Select(v => v.Split(new[] { ": " }, StringSplitOptions.None))
.ToDictionary(v => v[0], v => v[1]);
我不得不将分隔符改为分号而不是逗号。这里有一种不用正则表达式的方法:
dim inputs = {"Title: some, song title, Length: 5:35, Rating: 0, Genre: Other, Size: 7.6 MB",
"Size: 7.6 MB, Title: some, song title, Length: 5:35, Genre: Other, Rating: 0" }
for each s in inputs
dim output as new dictionary(of string, string)
dim tokens = s.split(", ")
dim lastKey = ""
for each t in tokens
if t.contains(":") then
dim kv = t.split(":")
lastKey = kv(0).trim
output.add(lastkey, "")
for n = 1 to kv.length - 1
output(lastkey) &= kv(n) & if( n = kv.length -1, "", ":")
next n
else
output(lastkey) &= ", " & t.trim
end if
next t
next s
如果您有一个包含“:”
的键,则会中断此操作。这里有一种不使用正则表达式的方法:
dim inputs = {"Title: some, song title, Length: 5:35, Rating: 0, Genre: Other, Size: 7.6 MB",
"Size: 7.6 MB, Title: some, song title, Length: 5:35, Genre: Other, Rating: 0" }
for each s in inputs
dim output as new dictionary(of string, string)
dim tokens = s.split(", ")
dim lastKey = ""
for each t in tokens
if t.contains(":") then
dim kv = t.split(":")
lastKey = kv(0).trim
output.add(lastkey, "")
for n = 1 to kv.length - 1
output(lastkey) &= kv(n) & if( n = kv.length -1, "", ":")
next n
else
output(lastkey) &= ", " & t.trim
end if
next t
next s
如果您有一个包含“:”
的键,则此键将中断:“
它们是用换行符分隔的,还是您如何知道歌曲何时结束?它们是用换行符分隔的,还是您如何知道歌曲何时结束?它来自IAccessable对象的accDescription,简言之,否,我无法格式化字符串它来自IAccessable对象的accDescription,简言之,否,我无法格式化字符串。我可以在字符串开头添加\b
。那些$
需要/m
。如果标题是foo,bar:baz
@Qtax,那么仍然会有麻烦:事实上,我有很多方法可以让它更健壮。但是,由于没有真正的样本可供选择,也不知道游戏的结局是什么,我想我应该提供尽可能简单(有效)的解决方案,而不是尝试[强制/推测]重定向到另一条路径。谢谢,我没有想到要进行不同的匹配。可以在它们的开头添加\b
。那些$
需要/m
。如果标题是foo,bar:baz
@Qtax,那么仍然会有麻烦:事实上,我有很多方法可以让它更健壮。但是,由于没有真正的样本可供选择,也不知道最终的结果是什么,我想我应该提供尽可能简单(有效)的解决方案,而不是试图[强制/推测]重定向到另一条路径。谢谢,我没有想到要进行不同的匹配。这是困难的部分,因为我无法控制字符串的格式。这是困难的部分,因为我无法控制字符串的格式