在句子中用作“句号”的所有点字符前面添加一个空格;不作为小数占位符

问题描述 投票:0回答:4

如何根据“.”替换字符串的一部分(句号)字符 仅当它出现在单词之后/之前/之间时, 不是在任何数字之前/之间。

示例:

This is a text string.  

-应该能够将

"string."
替换为
"string ."
(注意词尾和句号之间的空格)

示例2

This is another text string. 2.0 times longer.  

-应该可以用

"string."
替换
"string ."
(注意词尾和句号之间的空格) - 不应将
"2.0"
替换为
"2 . 0"

仅当“.”出现时才进行替换。出现在单词的结尾/开头。

是的 - 我尝试过各种正则表达式。 但我所做的一切要么什么也没有发生, 或者数字很好,但我从“.”之前的单词中取出最后一个字母。 (因此而不是“字符串”。我最终得到“字符串 g”。)

是的 - 我在这里浏览了很多帖子 - 我没有看到任何涉及欲望的内容,也没有看到在“.”之前抓取字符的“奇怪”问题。

php regex preg-replace
4个回答
2
投票

您可以使用后视功能

(?<=REXP)

preg_replace("/(?<=[a-z])\./i", "XXX", "2.0 test. abc")    // <- "2.0 testXXX abc"

仅当之前的文本与相应的正则表达式匹配时才会匹配(在本例中为

[a-z]
)。您可以以相同的方式使用前瞻
(?=REXP)
来测试匹配后的文本。

注意:还有一个负lookbehind

(?<!REXP)
和一个负lookahead
(?!REXP)
可用,如果
REXP
之前或之后不匹配,则会拒绝匹配。


0
投票
$input = "This is another text string. 2.0 times longer.";
echo preg_replace("/(^\.|\s\.|\.\s|\.$)/", " $1", $input);

http://ideone.com/xJQzQ


0
投票

我不太擅长正则表达式,但这就是我用基本 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>");
?>

-1
投票

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."

© www.soinside.com 2019 - 2024. All rights reserved.