我正在尝试使用正则表达式在同一行上多次搜索和替换。我相信 Regex 可以使用积极的前瞻/后视功能来做到这一点。
我有一长串州和机场的名单。我试图将它们全部成对放置
State, Aiport
,一次一行。
这是输入
State, Airports
----------------
Chicago, ORD, MDW
NY, JFK, LGA, EWR
California, LAX, JWA, LGB, BUR
这是输出。
Chicago, ORD
Chicago, MDW
NY, JFK
NY, LGA
NY, EWR
California, LAX
California, JWA
California, LGB
California, BUR
你能帮忙建议一个正则表达式或任何其他方法来完成这个吗?谢谢。
我为 Regex 使用 Notepad++,但可以为此使用任何文本编辑器。
那个正则表达式太复杂了。通过使用实际的编程语言,事情会简单得多。
这里我举一个Python的例子。在此处获取 Python 。
假设您有以下输入:
并且您想将其转换为给定的输出:
很简单,先把字符串拆成行,每行用逗号
list
分成几行。str
最后返回第一个元素和相同的所有其他元素的组合list
。^(\w+,\h*)(\w+)(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?
$1$2\n(?3$1$3)(?4\n$1$4)(?5\n$1$5)(?6\n$1$6)(?7\n$1$7)(?8\n$1$8)(?9\n$1$9)
. matches newline
解释:
替代品:
屏幕截图(之前):
截图(之后):
对于 Notepad++,如果你必须使用它,你也可以使用PythonScript :
Plugins
->Plugins Admin...
-> 检查PythonScript
并单击Install
。Plugins
->PythonScript
->New Script
-> 在默认目录中创建它scripts
。这适用于标题并保留它。
我知道您要求在 Notepad++ 中使用正则表达式,但无论如何这里有一个 perl 单行代码:
解释:
perl
: 调用 perl-n
标志:将对输入的每一行执行循环,并执行为每一行提供的代码-l
标志:自动删除输入的行尾并将其添加到输出-e
标志:使用提供的代码作为参数($state,@f) = split /,\s*/
: 在有逗号的地方拆分行,用可选的空格分隔,将第一个值放在 $state 中,其余值放在数组中@f
print "$state, $_" for @f
:对于@f
(所以每个机场)中的每个项目,打印一条包含州和机场的行选择:
-F',\s*'
标志:使用提供的分隔符正则表达式自动拆分,将结果存储在@F
. 暗示-n
。$state = shift @F
:从中删除第一项@F
并将其存储在$state
当然,芝加哥不是一个州 :-)