【问题标题】:Regex to remove chords from a text file正则表达式从文本文件中删除和弦
【发布时间】:2011-02-15 17:02:42
【问题描述】:

我有一个带有和弦的大音乐文件(大约 20k 行)。

我正在尝试制作一个程序来从我的文件中删除和弦。

我查找和弦的正则表达式是:

Regex regex = new Regex("([A-G](#|b)*([a-z]|[0-9])*)(/[A-G](#|b)*([a-z]|[0-9])*)*");

这个问题是一个逻辑问题。

如何使用我的正则表达式检测我的文本行是否只有和弦?

更新: 文件样本:

C                                     G 
Justo é o Senhor em seus santos caminhos, 
A -             G/B C     D4 D G 
Benigno em todas  as  suas  obras.  (bis) 
G          C          C7 
Perto está  o Senhor, (perto está dos que o invocam,) 
     F   C  D -   G  C               F        G         C F  
De todos que o invocam  (De todos que o invocam) 
C/G G   C                        F C 
Em   verdade. Aleluia! Aleluia! 

【问题讨论】:

  • 您能否提供该文件的示例。就几行?
  • 为什么是小写字母?他们将不带标点的线条。

标签: c# regex logic


【解决方案1】:

您可以通过将正则表达式包裹在 ^...$ 中来锚定您的正则表达式。
这将强制它匹配整行。

然后您可以循环访问File.ReadLines,如下所示:

var nonChords = File.ReadLines(path)
                    .Where(s => !regex.IsMatch(s));

【讨论】:

  • 我有这样的行: C F C F C G C ,如果我把 ^ 和 $ ,它永远不会找到一个'chordline'
  • @Renanlf:您可以修改您的正则表达式以匹配多个和弦:@"^((...)+\s*)+$"
【解决方案2】:

这个怎么样:

resultString = Regex.Replace(subjectString, @"^[A-G\d#b\s/-]*$(?:\r\n)?", "", RegexOptions.Multiline);

这将删除仅包含字母 A 到 G、#b/- 或空格的所有行。

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多