【问题标题】:Regular Expression to Split Text正则表达式拆分文本
【发布时间】:2022-01-17 07:56:36
【问题描述】:

我正在尝试将文本(国际象棋符号)拆分为每个移动的单独行。如果是白方移动,则移动是移动编号 (1.) 和移动 (e4),如果是黑移动,移动是移动 (c5)。 这是我的例子:

1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 
Nf6 5. Nc3 a6 6. h3 e5 7. Nde2 h5 8.
g3 Be6

这是我正在寻找的输出:

1. e4
c5
2. Nf3
d6
3. d4
cxd4
4. Nxd4
Nf6
5. Nc3
a6
6. h3
 e5
7. Nde2
h5 
8. g3
Be6

我在找到与第一部分匹配的模式方面取得了一些进展,但我不确定如何进行实际拆分。在极少数情况下,我的模式的一部分在一行中,其余部分在下一行中,例如8.[此处换行]g3 而不是 8。 g3 我会匹配。

[0-9]+\.\s?[A-Za-z0-9]+

这匹配移动编号、点、空格和实际移动。但后来我想替换下一个空格而不是实际的字符串。对于黑棋我正在尝试这个

[^0-9][^.][A-Za-z0-9]+

但它一直匹配 。 e4(白棋步),而不仅仅是像c5那样的黑棋步法。

【问题讨论】:

  • 我只是想如果它不在移动编号和移动之间,我实际上想要替换一个空格。我可以将 Replace: (?

标签: regex notepad++


【解决方案1】:

看起来带点的数字后面总是有两个“单词”。捕获它们并根据需要重新格式化匹配:

查找内容(\d+\.)\s+(\w+)\s+(\w+)\s*
替换为$1 $2\n$3\n

详情

  • (\d+\.) - 第 1 组 ($1):一个或多个数字和一个 .
  • \s+ - 一个或多个空格
  • (\w+) - 第 2 组 ($2):一个或多个单词字符
  • \s+ - 一个或多个空格
  • (\w+) - 第 3 组 ($3):一个或多个单词字符
  • \s* - 零个或多个空格

查看演示截图:

【讨论】:

    【解决方案2】:

    我通常使用这个正则表达式代码来设置它。

    查找:.(\d+\.)(?=[\w]*) ?\n?
    全部替换:\n$1

    查看下面附件中的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      相关资源
      最近更新 更多