[英]RegEx to reverse order of list?
是否有一个单一的正则表达式可以用在文本编辑器的搜索/替换对话框中来反转列表中项目的顺序?
例如,拿这个清单:
在像 EditPad 这样的文本编辑器中选择它,调出搜索和替换框,应用正则表达式(运行或不循环运行)并将其转换为:
这可以做到吗?
这不能通过正则表达式来完成。
我建议使用Perl之类的语言,您可以在其中使用正则表达式拆分列表并以相反的顺序写回。
在MSDOS中
SORT /R < originallist.txt > resortedlist.txt
仅当列表具有固定的已知项数n
时,即使正则表达式也随着n
增长而变得更加复杂。 (主要困难通常是让字面换行符进入引擎。)
使用脚本语言可以很容易地生成这一系列日益复杂的正则表达式。 但是,一旦使用脚本语言,几乎肯定可以更轻松地将其用于反转!
只是偶然发现了这个问题,因为我试图在 Google 表格中做同样的事情。
事实证明,只要知道列表的最大长度,就可以使用regexreplace
函数使用正则表达式反转列表。 请注意,Sheets 可以获取一个正则表达式转换的输出并将其提供给另一个转换,这是关键,因为您需要嵌套它们的 O(log N)。 此外,如果正则表达式不匹配,则regexreplace
输出等于输入,这也是它在最大长度的任何长度列表上工作的关键。 而且,您需要更改定界符,但如果您愿意,可以在最终包装器中将其改回。
例如,假设您有一个由逗号分隔的小写单词列表:“一、二、三、四、五”
然后,使用 Google Sheets regexreplace
函数和 regex 语法(它使用 RE2 regex,所以这应该(?)翻译成大多数语言),下面将执行此操作(添加缩进以提高可读性):
=regexreplace(
regexreplace(
regexreplace(A1,"([a-z\|]+),([a-z\|]+)","$2|$1"),
"([a-z\|]+),([a-z\|]+)","$2|$1"),
"([a-z\|]+),([a-z\|]+)","$2|$1")
输出将是:“五|四|三|二|一”。 请注意包含新的分隔符“|” 在正则表达式中,这是关键。 此表达式最多适用于列表中的 8 个元素。 添加另一个“regexreplace”,它最多适用于 16 个,等等。
我意识到自问这个问题已经有一段时间了...但是这个答案不在这里。
根据您在文本编辑器中格式化列表的方式,可以按照以下步骤进行操作:
原文:“快棕色狐狸”
查找:(\\ w +)\\ s(\\ w +)\\ s(\\ w +)\\ s(\\ w +)
更换:$ 4 $ 3 $ 2 $ 1
输出:“ Fox Brown Quick The”(在notepad ++上运行,只需确保选择“正则表达式”选项)
相当于javascript:
var string = "The Quick Brown Fox";
string.replace(/(\w+)\s(\w+)\s(\w+)\s(\w+)/,"$4 $3 $2 $1");
很好的参考是https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.