2017-06-29 62 views
0

我可以從pgn遊戲中獲得標記,但是當我想要取消標記以便只獲取移動時,看起來不起作用。使用正則表達式查找除此模式以外的所有內容

模式得到公正的標籤(正常工作)

(\[[^\\[]*\]) 

模式來獲得,除了標籤圖案的一切(失敗)

^(\[[^\\[]*\]).*$ 

PGN遊戲測試

[Event "Wch U16"] 
[Site "Wattignies"] 
[Date "1976.??.??"] 
[Round "?"] 
[White "Dunne, David Joseph"] 
[Black "Kasparov, Gary"] 
[Result "0-1"] 
[WhiteElo ""] 
[BlackElo ""] 
[ECO "B51"] 

1. e2e4 c7c5 2. g1f3 d7d6 3. f1b5+ b8d7 4. d2d4 g8f6 5. b1c3 c5d4 6. d1d4 
e7e5 7. d4d3 h7h6 8. c1e3 f8e7 9. e1g1 e8g8 10. a1d1 a7a6 11. b5c4 d8c7 12. 
a2a4 d7c5 13. e3c5 c7c5 14. c3d5 f6d5 15. c4d5 a8b8 16. f3d2 c8d7 17. d5b3 
b7b5 18. a4a5 b8c8 19. d2f3 d7e6 20. f1e1 f8d8 21. e1e2 c8c7 22. e2d2 d8c8 
23. h2h3 c5b4 24. b3e6 f7e6 25. d3b3 c7c4 26. d2e2 b4b3 27. c2b3 c4c1 28. 
d1c1 c8c1+ 29. g1h2 g8f7 30. f3e1 e7d8 31. e1d3 c1d1 32. d3b4 d8a5 33. b4a6 
d1c1 34. b3b4 a5b6 35. b2b3 c1c3 36. e2a2 c3b3 37. a2c2 b6d4 38. c2c7+ f7f6 
39. f2f3 b3a3 40. c7c6 a3c3 41. c6c7 c3c7 42. a6c7 d4c3 43. c7b5 c3b4 44. 
b5a7 f6f7 45. h2g3 f7e8 46. g3g4 e8d7 47. f3f4 g7g6 48. h3h4 d7c7 49. f4f5 
e6f5+ 50. e4f5 g6f5+ 51. g4f5 c7b7 52. a7b5 b7b6 53. b5d6 b4d6 54. g2g4 
b6c6 55. g4g5 h6g5 56. h4g5 c6d5 57. g5g6 d6f8 0-1 

編輯#1 預計產量將(匹配部分)

1. e2e4 c7c5 2. g1f3 d7d6 3. f1b5+ b8d7 4. d2d4 g8f6 5. b1c3 c5d4 6. d1d4 
e7e5 7. d4d3 h7h6 8. c1e3 f8e7 9. e1g1 e8g8 10. a1d1 a7a6 11. b5c4 d8c7 12. 
a2a4 d7c5 13. e3c5 c7c5 14. c3d5 f6d5 15. c4d5 a8b8 16. f3d2 c8d7 17. d5b3 
b7b5 18. a4a5 b8c8 19. d2f3 d7e6 20. f1e1 f8d8 21. e1e2 c8c7 22. e2d2 d8c8 
23. h2h3 c5b4 24. b3e6 f7e6 25. d3b3 c7c4 26. d2e2 b4b3 27. c2b3 c4c1 28. 
d1c1 c8c1+ 29. g1h2 g8f7 30. f3e1 e7d8 31. e1d3 c1d1 32. d3b4 d8a5 33. b4a6 
d1c1 34. b3b4 a5b6 35. b2b3 c1c3 36. e2a2 c3b3 37. a2c2 b6d4 38. c2c7+ f7f6 
39. f2f3 b3a3 40. c7c6 a3c3 41. c6c7 c3c7 42. a6c7 d4c3 43. c7b5 c3b4 44. 
b5a7 f6f7 45. h2g3 f7e8 46. g3g4 e8d7 47. f3f4 g7g6 48. h3h4 d7c7 49. f4f5 
e6f5+ 50. e4f5 g6f5+ 51. g4f5 c7b7 52. a7b5 b7b6 53. b5d6 b4d6 54. g2g4 
b6c6 55. g4g5 h6g5 56. h4g5 c6d5 57. g5g6 d6f8 0-1 

編輯#2使用@revo的方法,我能使其工作在C#

String MOVES_PATTERN = @"(?m)^\s*[^][]+"; 

    //Test moves 
    this.tb_uci_output.Text += getMoves(content, MOVES_PATTERN); 

private String getMoves(String sentence, String pattern) 
{ 
    String moves = ""; 
    MatchCollection m = Regex.Matches(sentence, pattern); 
    if (m.Count > 0) 
    { 
     foreach (Match match in m) 
     { 
      //Console.WriteLine(match.Value); 
      moves += match.Value + Environment.NewLine; 
     } 
     //Console.WriteLine("length of match " + m.Count); 

    } 
    else 
    { 
     Console.WriteLine("error while parsing Regular expression"); 
    } 

    return moves; 
} 

我會提前任何輸入:)

+2

請用語言/環境標記您的問題。 – revo

+0

方括號是否有機會成爲此舉的一部分?否則,你可以只用'[^]] + $' –

+0

@ revo,你可以用任何語言發佈你的方法,我可以將它移植到C#。 – Carlos

回答

1

什麼你正在嘗試做的幾乎可以很容易地使用短,性能WIS完成e正則表達式:

(?m)^\s*[^][]+ 

但是,這不是可移植的,但在C#中的工作原樣。

1

只是捕獲everyt興你不想第一 - 拋出了,那麼捕捉你想要什麼:

/(?:\[[^\\[]*\]\n)*([\s\S]*)/ 

Demo

如果你只是想沒有[在他們的線,用前瞻:

/^(?!^.*\[)(?=\w+).*/mg 

Demo 2

相關問題