【发布时间】:2012-01-17 19:45:07
【问题描述】:
我有一个包含一堆句子的文本文件。句子包含空格(空格、制表符、换行符)以分隔由字母和/或数字组成的单词。 我想找到单词“123”或“-123”并在数字开始前插入一个点 (.)。因此,所有出现的“123”和“-123”都将转换为“.123”和“-.123”。
我正在尝试以下方法:
$line =~ s/(\s+-*123\s+)/getNewWord($1)/ge
其中 $line 包含从文件中读取的一行,getNewWord word 函数会将点 (.) 放在匹配单词的适当位置。
但它不适用于有两个连续的“123”如“123 123”的情况。由于第一个“123”被替换为“.123”,因此单词后面的空格已经匹配,而第二个“123”不匹配,因为正则表达式引擎无法将前面的空格与该单词匹配。
谁能帮我解决这个问题?谢谢!
【问题讨论】:
-
我没有看到这个问题中的“重叠”是什么?
-
可能这是一个更简单的解决方案 s/(-?)\b(\d+)\b/$1.$2/g