如何根据“.”替换字符串的一部分(句号)字符 仅当它出现在单词之后/之前/之间时, 不是在任何数字之前/之间。
示例:
This is a text string.
-应该能够将
"string."
替换为 "string ."
(注意词尾和句号之间的空格)
示例2
This is another text string. 2.0 times longer.
-应该可以用
"string."
替换 "string ."
(注意词尾和句号之间的空格)
- 不应将 "2.0"
替换为 "2 . 0"
仅当“.”出现时才进行替换。出现在单词的结尾/开头。
是的 - 我尝试过各种正则表达式。 但我所做的一切要么什么也没有发生, 或者数字很好,但我从“.”之前的单词中取出最后一个字母。 (因此而不是“字符串”。我最终得到“字符串 g”。)
是的 - 我在这里浏览了很多帖子 - 我没有看到任何涉及欲望的内容,也没有看到在“.”之前抓取字符的“奇怪”问题。
您可以使用后视功能
(?<=REXP)
preg_replace("/(?<=[a-z])\./i", "XXX", "2.0 test. abc") // <- "2.0 testXXX abc"
仅当之前的文本与相应的正则表达式匹配时才会匹配(在本例中为
[a-z]
)。您可以以相同的方式使用前瞻(?=REXP)
来测试匹配后的文本。
注意:还有一个负lookbehind
(?<!REXP)
和一个负lookahead (?!REXP)
可用,如果REXP
之前或之后不匹配,则会拒绝匹配。
$input = "This is another text string. 2.0 times longer.";
echo preg_replace("/(^\.|\s\.|\.\s|\.$)/", " $1", $input);
我不太擅长正则表达式,但这就是我用基本 PHP 完成任务所要做的。基本上将整个字符串分解为 。值,查看每个变量以查看最后一个字符是字母还是数字,如果是数字则添加一个空格,然后将变量放回一起。
<?
$string = "This is another text string. 2.0 times longer.";
print("$string<br>");
$string = explode(".",$string);
$stringcount = count($string);
for($i=0;$i<$stringcount;$i++){
if(is_numeric(substr($string[$i],-1))){
$string[$i] = $string[$i] . " ";
}
}
$newstring = implode('.',$string);
print("$newstring<br>");
?>
It should only do the replacement if the "." appears at the end/start of a word.
搜索:
/([a-z](?=\.)|\.(?=[a-z]))/
"$1 "
ig
(不区分大小写,全局)
在 Perl 中测试:
use strict;
use warnings;
my $samp = '
This is another text string. 2.0 times longer.
I may get a string of "this and that.that and this.this 2.34 then that 78.01."
';
$samp =~ s/([a-z](?=\.)|\.(?=[a-z]))/$1 /ig;
print "$samp";
输入:
This is another text string. 2.0 times longer.
I may get a string of "this and that.that and this.this 2.34 then that 78.01."
输出:
This is another text string . 2.0 times longer .
I may get a string of "this and that . that and this . this 2.34 then that 78.01."