REXEX 匹配一个字符串并最多选择一个字符

时间:2021-05-30 02:03:22

标签: regex

我正在尝试创建一个正则表达式,我可以在其中匹配字符串的首字母,然后替换特定字符后的任何内容....例如:

字符串 = 123456789:0:0 => 输出 = 123456789:2:4

我需要一个正则表达式,它需要匹配乞讨中的“123”,然后只用另一个字符串替换“0:0”。

匹配“123”很容易:^123,但在此之后我找不到方法去:只替换字符串的其余部分。

我将不胜感激。

4 个答案:

答案 0 :(得分:0)

在不知道您确切的编程上下文的情况下,您似乎正在使用 regex_replace 函数的某个版本。通过适当的分组,这很容易做到。

不要想着要替换什么。想想你想保留什么。

^(.*?123.*?:)(0:0)(.*?)$

并作为您的替换字符串使用

$12:4$3

答案 1 :(得分:0)

要替换“0:0”,您可以使用:

model = effnet.EfficientNetB0(weights = 'imagenet')

Numbers between 123 and 0:0 => /^(123[0-9]+:)0:0/ replace ${1}2:4

这个 RegExp 创建了一个从 123 开始的组,直到它到达 0:0,然后我们在替换字符串中使用该组。但是,这取决于您使用的编程语言:

PHP 示例

Anything between 123 and 0:0 => /^(123.+:)0:0/ replace ${1}2:4

JavaScript 示例

$result = preg_replace("/^(123[0-9]+:)0:0/", "\${1}2:4", "123456789:0:0");

答案 2 :(得分:0)

您可以使用否定字符类来匹配直到第一次出现冒号。

在替换中使用捕获组 1,然后是替换。

^(123[^:]*:)0:0$
  • ^ 字符串开头
  • (123[^:]*:) 使用 negated character class
  • 匹配 123 后跟除 : 之外的任何字符的 0 次以上
  • 0:0 逐字匹配
  • $ 字符串结束

Regex demo

如果你想在匹配第一个冒号后全部替换,你可以使用.+

^(123[^:]*:).+

看另一个regex demo

答案 3 :(得分:0)

使用 JavaScript:

const str = `123456789:0:0`;
console.log(str.replace(/(?<=^123[^:]*:).*/, `2:4`));

regex proof

说明

--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    ^                        the beginning of the string
--------------------------------------------------------------------------------
    123                      '123'
--------------------------------------------------------------------------------
    [^:]*                    any character except: ':' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    :                        ':'
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))
相关问题