![我想使用 Notepad++ 按单词数对文本短语进行排序](https://linux22.com/image/1622979/%E6%88%91%E6%83%B3%E4%BD%BF%E7%94%A8%20Notepad%2B%2B%20%E6%8C%89%E5%8D%95%E8%AF%8D%E6%95%B0%E5%AF%B9%E6%96%87%E6%9C%AC%E7%9F%AD%E8%AF%AD%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
我希望程序能够自动选择或识别句子(从一个点到下一个点,或者从一个点到问号或感叹号),并按每个句子的单词数对每个句子进行排序。这样单词较少的句子就放在一端,单词较多的句子就放在另一端。
举个例子:
普通文本:今天过得很艰难。希望接下来的几天会好起来。你也希望如此吗?希望你也和我一样希望如此!
排序后的文本:
- 您也抱有同样的希望吗?
- 今天真是艰难的一天。
- 我希望接下来的几天会变得更好。
- 我希望你也和我一样希望!
也可以是:你也希望如此吗?今天过得非常艰难。希望接下来的几天会好起来。希望你也和我一样希望如此!
我不知道该怎么做,有人能帮助我吗?
提前致谢
答案1
Notepad++ 中的替换对话框(Ctrl+H)具有非常强大的正则表达式搜索模式。通过该模式和其他两个标准 Notepad++ 函数,您可以实现所有想要的功能。
首先,如果您的任何句子跨行,请删除所有行尾,方法是将其替换[\r\n]
为(一个空格)。例如:
The day was very difficult today. I hope the next few days get better. Do you hope the same? I hope you hope the same as me!
([^.!?]+[.!?][ "])\s*
然后将每个句子替换为,将其放在一行中\1\r\n
。这会对您拥有的句子类型以及它们的格式做出一些假设,但这可能是一个足够好的近似值。值得注意的是,“她看起来......累了。”会因为三个点而变得混乱。示例:
The day was very difficult today.
I hope the next few days get better.
Do you hope the same?
I hope you hope the same as me!
正则表达式不支持计数,所以现在我们必须要有点技巧。将当前内容命名为文件 A。制作一份副本,命名为文件 B。
在文件 B 中,将#
(如果有)替换为(一个空格),然后替换
\w[^\W]+\W
为#
。这并不完美,因为正则表达式的单词边界与语言的单词边界不同。您可以使用更能匹配任何语言的单词的正则表达式,例如[-_'0-9a-zA-Z]+
英语。示例:
# # # # # #.
# # # # # # # #.
# # # # #?
# # # # # # # #!
将其余所有内容( )替换为空。然后将 替换为[^#\r\n]+
在每行末尾添加一个空格。示例:$
######
########
#####
########
现在块复制整个文件 B。将光标放在文件的最开头即可。然后滚动到最底部,注意不要移动光标。按住 Shift+Alt 并单击足够远的右侧位置,以便至少捕获最长的一行。Ctrl-C。
将块粘贴到文件 A 的最开始处。现在每行都应带有表示字数的哈希前缀。示例:
###### The day was very difficult today.
######## I hope the next few days get better.
##### Do you hope the same?
######## I hope you hope the same as me!
现在使用菜单,编辑 -> 行操作 -> 按字典顺序升序对行进行排序。例如:
##### Do you hope the same?
###### The day was very difficult today.
######## I hope the next few days get better.
######## I hope you hope the same as me!
最后,通过将其替换为空来删除前导哈希值^#*
。