Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式替换两个l之间的字符_Regex_Grep_Textwrangler - Fatal编程技术网

Regex 正则表达式替换两个l之间的字符

Regex 正则表达式替换两个l之间的字符,regex,grep,textwrangler,Regex,Grep,Textwrangler,我的文本文件有一万多行。每行以一个单词或短语开头,后跟一个选项卡和内容,例如: [line 1] This is the first line. [tab] Here is the content.[end of line] 我想在每行开头和制表符(\t)之间的所有单词中找到字符s,并用管道(|)替换它,使文本看起来像: [line 1] Thi| i| the fir|t line. [tab] Here is the content.[end of line] 以下是我所做的: Sear

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

[line 1] This is the first line. [tab] Here is the content.[end of line]
我想在每行开头和制表符(
\t
)之间的所有单词中找到字符
s
,并用管道(
|
)替换它,使文本看起来像:

[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

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


非常感谢

您正在搜索包含s的行并进行匹配。相反,您应该直接搜索s,并使用lookahead确保它后面有一个选项卡

Search: s(?=.*\t)
Replace: |
请注意,这将捕获到最后一个选项卡的所有s。-如果您的主要内容可以包含选项卡,这将是一个问题

要在第一个标签后停止捕捉s,你必须作弊。因为变长负lookback在AFAIK和任何regexp方言中都不起作用

然而,如果我们能确保最后的s能抓住整条线

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

如果在第一个选项卡之前没有出现s,则这将捕获整行。在那条线前面放一个|。我看没有办法了。

非常感谢。当然,这将是一个问题,因为我的主要内容有时包含几个选项卡。如何限制它在每行的第一个选项卡之后停止搜索和替换?我已经给出了一个解决这个问题的建议。虽然还没有完成。@NiamhDoyle好的。我认为目前的解决方案是我能做的最好的。(除了打字错误)非常感谢你的帮助,@Taemyr。这也是问题所在,因为选项卡前的零件有时根本不包含
s
。好的,我可能不得不坚持我的方法:运行regex几次,直到它完成所有
s
的替换。当存在多个选项卡时,您的regexp也会出现错误行为。:)