Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式,以避免在已有点的情况下放置点_Java_Regex - Fatal编程技术网

Java 正则表达式,以避免在已有点的情况下放置点

Java 正则表达式,以避免在已有点的情况下放置点,java,regex,Java,Regex,我试图在行首的每个数字后面加一个点 我尝试了这个正则表达式: ^([0-9]+)=$0. 请注意,此表达式将作为服务器中的规则使用(我不能使用任何Java代码) 它在没有点的情况下工作,但问题是它也会在其他地方放置点 例如,如果文本中有一个类似于“4.1”的内容,则它将放置一个点,然后变成“4..1” 如果数字后面已经有点,如何避免放置点?捕获模式==^([0-9]+) 替换模式==$0。您可以使用断言来限制匹配。 我使用了一个捕获组,但您可能不需要这样做。 另外,请确保将多行标志设置为 ^表

我试图在行首的每个数字后面加一个点

我尝试了这个正则表达式:

^([0-9]+)=$0.
请注意,此表达式将作为服务器中的规则使用(我不能使用任何Java代码)

它在没有点的情况下工作,但问题是它也会在其他地方放置点

例如,如果文本中有一个类似于
“4.1”
的内容,则它将放置一个点,然后变成
“4..1”

如果数字后面已经有点,如何避免放置点?

捕获模式==^([0-9]+)


替换模式==$0。

您可以使用断言来限制匹配。
我使用了一个捕获组,但您可能不需要这样做。
另外,请确保将多行标志设置为
^
表示行的开头(不是字符串)

查找:
^(\d+(![。\d])

更换
$1。

格式:

 ^                      # Beginning of line
 ( \d+ )                # (1), Bunch of digits
 (?! [.\d] )            # If not followed by a dot or another digit
                        # Note -The not digit is to stop it from matching 
                        # the first 12 from 123.3

不要担心前导数字后面是否有点,只要去掉有点的点,然后始终放回一个:

search: ^(\d+)\.?
replace: $1.
这具有以下效果:

"1 This is the first line" -> "1. This is the first line"
"1. This is the first line" -> "1. This is the first line"
"1.1 This is the first line" -> "1.1 This is the first line"

这是哪种regex方言?你有你想要的输入和输出的例子吗?你能添加一个示例文本和你期望的输出吗?输入--------项目主题详细信息1数学sdfjgsd sjfha sdsjkfh 2科学IOTPOYIGHPGIOJHTypl 2.1物理学KJGHKFGHLKFJHFGHFLGH我想要输出为--------项目主题详细信息1。数学sdfjgsd sjfha sdsjkfh 2。科学IotpoyigmhPGGIOJHTypl 2.1物理学KJGHKFGHLKFJHFLGHLGH1这是第一行2这是第二行2.1这是子行我希望输出为------1。这是第2行。这是第二行2.1这是子行,这不正是OP描述的不起作用,因为如果在已经有点的情况下放置点?这将把
“1.foo”
变成
“1..foo”
这将停止放置已经有点的点,但不将点放置在每个数字之后,例如,1和2之后没有点,2.1与我之前的相同comments@Sri-不知道你的意思。它没有替换为任何点?示例::1。这是第2行。这是第二行,我想在1和2后面放一个点,这是不可能的。谢谢,我在
1中只看到一行。这是第2行。这是第二行,我在任何地方都看不到任何
1和
。如果我的帖子不起作用,我会删除它。它可能是对替换的函数调用。是否在捕获组后添加一个点?另外,它可能是
$0。
你也试过了吗?“1这是第一行”->“1.这是第一行”这没有发生,感谢正则表达式是正确的,但可能是语法问题:我已经从正则表达式中删除了双转义(你还没有告诉我们你使用了什么)。尝试编辑后的版本。我必须假设如果
(?![.\d])
最后不起作用,那么在所有条件相同的情况下,他运行此操作的服务器没有使用支持断言的正则表达式引擎。@sln我怀疑是同样的情况。发现不支持环视的正则表达式引擎并不少见,尤其是在数据库中——AFAIK JavaScript不支持环视。