0

我的文本文件有一万多行。每行以一个单词或短语开头,后跟一个制表符和内容,例如:

[line 1] This is the first line. [tab] Here is the content.[end of line]

我想s在每行开头和制表符 ( \t) 之间的所有单词中查找字符,并用管道 ( ) 替换它,|以便文本看起来像:

[line 1] Thi| i| the fir|t line. [tab] Here is the content.[end of line]

这是我所做的:

Search: ^(.*)s+(.*)?\t 
Replace: \1|\2\t

它可以工作,但问题是它不能s一次性替换。s在替换所有单词之前,我必须多次单击全部替换。

所以我的问题是:如何s在一次搜索和替换中替换所有出现的字符?

请注意,我正在使用 TextWrangler,但我对其他编辑器没有意见。

非常感谢。

4

1 回答 1

1

您正在搜索包含 s 的行并进行匹配。相反,您应该直接搜索 s,并使用前瞻来确保它后面跟着一个制表符。

Search: s(?=.*\t)
Replace: |

请注意,这会捕获所有 s 直到最后一个选项卡。- 如果您的主要内容可以包含标签,这将是一个问题。

要在第一个选项卡之后停止捕获 s,您必须作弊。由于可变长度负回溯在 AFAIK 任何正则表达式方言中都不起作用。

但是,如果我们能确保最后一个 s 抓住整条线......

Search: (?:(^[^s\t]*\t.*$)|s([^s\t]*(?:(?=s.*\t)|\t.*$)))
Replace: |\1\2

在第一个制表符之前没有出现 s 的情况下,这将捕获整行。并放一个| 在那条线的前面。我看不出有什么办法。

于 2013-10-22T15:50:23.690 回答