加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 使用Perl正则表达式重叠文本替换

发布时间:2020-12-14 05:38:31 所属栏目:百科 来源:网络整理
导读:我有一个包含一堆句子的文本文件.句子包含空格(空格,制表符,新行)以分隔出由字母和/或数字组成的单词. 我想找到单词“123”或“-123”并在数字开始前插入一个点(.).因此,所有出现的“123”和“-123”都将转换为“.123”和“-123”. 我试着用以下方法: $line
我有一个包含一堆句子的文本文件.句子包含空格(空格,制表符,新行)以分隔出由字母和/或数字组成的单词.
我想找到单词“123”或“-123”并在数字开始前插入一个点(.).因此,所有出现的“123”和“-123”都将转换为“.123”和“-123”.

我试着用以下方法:

$line =~ s/(s+-*123s+)/getNewWord($1)/ge

其中$line包含从文件中读取的行,而函数getNewWord将把点(.)放在匹配的单词中的适当位置.

但它不适用于有两个连续“123”的情况,如“123 123”.当第一个“123”被“.123”替换时,该单词后面的空格已经匹配,第二个“123”不匹配,因为正则表达式引擎无法将前一个空格与该单词匹配.

谁能帮我这个?谢谢!

解决方法

我同意MRAB(并且他/她的回答是1),但是没有真正需要getNewWord功能.我会将整个语句更改为以下类似之一:

$line =~ s/((?:^|s)-?)(123)(?=s|$)/$1.$2/g;

$line =~ s/(?:^|(?<=s))(-?)(123)(?=s|$)/$1.$2/g;

$line =~ s/(?:^|(?<=s)|(?<=s-))(?=123(?:s|$))/./g;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读