正则表达式:如何更改点后的行顺序?

正则表达式:如何更改点后的行顺序?

如何使用正则表达式更改点后的行顺序?

现在,在一个由个人或社会背景主导的背景下,它可以描述转移性或病理性问题。从现代视角、社会认知和关怀解释迁移模块来看,我们可以通过自我之旅找到出口。我们不能再忍受这种痛苦,我们必须要小心谨慎。从这种不一致中可以推断出新的人格结构与前一个人的相似性 [5]。从这个角度来看,人们在关注的焦点在于照明模块的生成,以及重复提出当前关系的问题。

应该转换成如下形式:

从这种不一致中可以推断出新的人格结构与前一个人的相似性 [5]。从这个角度来看,人们在关注的焦点在于照明模块的生成,以及重复提出当前关系的问题。我们不能再忍受这种痛苦,我们必须要小心谨慎。现在,在一个由个人或社会背景主导的背景下,它可以描述转移性或病理性问题。从现代视角、社会认知和关怀解释迁移模块来看,我们可以通过自我之旅找到出口。

我自己也考虑过这个,但效果不是很好:

搜索:(?-s)^(.+?\.)(\w+)((?1))

替换为:\4\2\1\3

答案1

这将重新排序句子(任意数量),但并不是真正随机的。

  • Ctrl+H
  • 找什么:(?:^|\G)(.+?\.)\h*((?1))(?:\h*((?1)))?
  • 用。。。来代替:$2(?3 $3 : )$1
  • 检查环绕
  • 检查正则表达式
  • Replace all

解释:

(?:             # non capture group
  ^             # beginning of line
 |              # OR
  \G            # restart from last match position
)               # end group
(.+?\.)         # group 1, 1 or more any character, not greedy, followed by a dot
\h*             # 0 or more horizontal spaces
((?1))          # group 2, same pattern as group 1
(?:             # non capture group
  \h*           # 0 or more horizontal spaces
  ((?1))        # group 3, same pattern as group 1
)?              #end group, optional

替代品:

$2              # content of group 2
(?3 $3 : )      # if group 3 exists then content of group 3, else a space
$1              # content of group 3

给定示例的结果:

从现代视角、社会认知和关怀解释迁移模块来看,我们可以通过自我之旅找到出口。我们不能再忍受这种痛苦,我们必须要小心谨慎。现在,在一个由个人或社会背景主导的环境中,它可以描述病理问题的转移。从这个角度来看,人们在关注的焦点在于重复当前关系的提示。从这种不一致中可以推断出新的人格结构与前一个人的相似性 [5]。

屏幕截图:

在此处输入图片描述

答案2

您可以使用这个 Perl 单行程序来处理任意数量的句子并以随机顺序打印所有句子。

perl -nE 'BEGIN{use List::Util qw/shuffle/;$/="."}chomp;s/^\h*//;push @l,$_ if length$_>2;END{say join(". ",shuffle@l),"."}' file.txt

输出:

从现代视角、社会认知和关怀解释迁移模块来看,我们可以通过自我之旅找到出口。我们不能再忍受这种痛苦,我们必须要小心谨慎。从这种不一致中可以推断出新的人格结构与前一个人的相似性 [5]。现在,在一个由个人或社会背景主导的背景下,它可以描述转移性或病理性问题。从这个角度来看,人们在关注的焦点在于照明模块的生成,以及重复提出当前关系的问题。

解释:

perl -nE                        # invoke perl interpreter
'                               # begin code
  BEGIN{                        # block executed before anything
    use List::Util qw/shuffle/; # use a module
    $/="."                      # define input separator as a dot
  }                             # end block
  chomp;                        # remove separator
  s/^\h*//;                     # remove horizontal whitespace at the beginning or a sentence
  push @l,$_ if length$_>2;     # push the sentence in an array if its length is greater than 2
  END{                          # block executed  at the end of the program
    say join(". ",shuffle@l),"." # prints randomly each sentence
  }                             # end block
'                               # end code
file.txt                        # file to be processed

相关内容