正则表达式拆分文本
Posted
技术标签:
【中文标题】正则表达式拆分文本【英文标题】: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: (? 【参考方案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
查看下面附件中的结果
【讨论】:
以上是关于正则表达式拆分文本的主要内容,如果未能解决你的问题,请参考以下文章