我有一个包含一堆句子的文本文件.句子包含空格(空格,制表符,新行)以分隔出由字母和/或数字组成的单词.我想找到单词"123"或"-123"并在数字开始前插入一个点(.).因此,所有出现的"123"和"-123"都将转换为".123"和"-123".
我试着用以下方法:
$line =~ s/(\s+-*123\s+)/getNewWord($1)/ge
Run Code Online (Sandbox Code Playgroud)
其中$ 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;
Run Code Online (Sandbox Code Playgroud)