如何解决使用正则表达式.net的字符串值
| 我正在尝试获取值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,Rating: 0
都将返回上面的值
谢谢
解决方法
好吧,您可以执行以下操作:
/Title: (.*?)(?=,\\s\\w+:|$)/ Song Title
/Length: (\\d+:\\d+)/ Length
/Rating: (\\d+)/ Rating
/Genre: (.*?)(?=,\\s\\w+:|$)/ Genre
/Size: (\\d+(?:\\.\\d)?+\\s\\w+)/ Size
(?=,\\s\\w+:|$)
模式只是确保它仅获取\“ field \”的值(即在行的末尾或下一个分组处停止)。
, 与Regex相比,对于解析器而言,这确实是更多的工作。您可以在字符串的空间上拆分字符串,然后循环查找冒号并以此方式计算值。在这里使用正则表达式会导致效率低下或使您发疯。
, 您可以控制输入字符串的格式吗?如果是这样,则将其更改为:
Title: some,song title; Length: 5:35; Rating: 0;
使用;
,而不是,
。您可以分割字符串:
string[] parts = input.Split(\';\');
并单独处理零件。在这种情况下,请不要浪费时间使用正则表达式。
, 我不会使用Regex而是
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,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
如果您的键中包含\":\"
,则此操作会中断。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。