使用正则表达式(.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,那么仍然会有麻烦:事实上,我有很多方法可以让它更健壮。但是,由于没有真正的样本可供选择,也不知道最终的结果是什么,我想我应该提供尽可能简单(有效)的解决方案,而不是试图[强制/推测]重定向到另一条路径。谢谢,我没有想到要进行不同的匹配。这是困难的部分,因为我无法控制字符串的格式。这是困难的部分,因为我无法控制字符串的格式