我想使用 Notepad++ 按单词数对文本短语进行排序

我想使用 Notepad++ 按单词数对文本短语进行排序

我希望程序能够自动选择或识别句子(从一个点到下一个点,或者从一个点到问号或感叹号),并按每个句子的单词数对每个句子进行排序。这样单词较少的句子就放在一端,单词较多的句子就放在另一端。

举个例子:

普通文本:今天过得很艰难。希望接下来的几天会好起来。你也希望如此吗?希望你也和我一样希望如此!

排序后的文本:

  1. 您也抱有同样的希望吗?
  2. 今天真是艰难的一天。
  3. 我希望接下来的几天会变得更好。
  4. 我希望你也和我一样希望!

也可以是:你也希望如此吗?今天过得非常艰难。希望接下来的几天会好起来。希望你也和我一样希望如此!

我不知道该怎么做,有人能帮助我吗?

提前致谢

答案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!

最后,通过将其替换为空来删除前导哈希值^#*

相关内容