正则表达式拆分文本

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

查看下面附件中的结果

【讨论】:

以上是关于正则表达式拆分文本的主要内容,如果未能解决你的问题,请参考以下文章

Java - 正则表达式拆分输入文本但保留分隔符[重复]

用于根据空格分隔符拆分文本的正则表达式 [重复]

正则表达式拆分文本

Python - 用于将文本拆分为句子的正则表达式(句子标记)[重复]

正则表达式拆分和忽略括号

使用正则表达式将字符串拆分为句子