regex 正则表达式捕获1个字符,跳过2个并捕获其余字符,并将其附加到捕获的第一个字符

jw5wzhpr  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(83)

我很难捕捉到我需要的东西。所以我试图从中捕获的字符串看起来像这样:

Managed client:ASB3200418

字符串
我需要捕获冒号后面的A,后面跟着数字(所以忽略SB)。因此,我需要捕捉到这一点:A3200418
我试了几个组合,我认为应该工作,但它似乎不工作。以下是我尝试过的:
1.第一个月

  1. (?:Managed\s*client:)A.{2}\K[A-Z]*\w*
    任何其他建议如何捕捉我需要非常赞赏。干杯马克。
hfwmuf9z

hfwmuf9z1#

您可以使用2个捕获组,在组1中捕获单个字符A-Z,并在组2中捕获1个或多个数字。

\bManaged\s+client:([A-Z])[^\d\s]*(\d+)\b

字符串
模式匹配:

  • \bManaged\s+client:Managed client:与前导字边界和中间的1+个空格字符匹配
  • ([A-Z])捕获组1,匹配单个字符A-Z
  • [^\d\s]*匹配除和数字或空格字符以外的可选字符
  • (\d+)捕获组2,匹配1+位数
  • \b防止部分字匹配的字边界

Regex demo
或者更具体的:

\bManaged\s+client:(A)SB(\d+)\b


Regex demo

uujelgoq

uujelgoq2#

您可以使用正则表达式将不需要的内容替换为空字符串,而不是捕获您需要的内容。

^.*:|(?<=[A-Z])[A-Z]

字符串
Demo
这个表达式是这样的:“匹配从字符串开头(^)到最后一个冒号的所有字符,或者(|)匹配前面有大写字母的大写字母[A-Z]。”(?<=[A-Z])是一个 * 正向后查找 *。这是一个必须满足的Assert,但不是返回的匹配的一部分。
还可以将光标悬停在链接处的表达式的每个部分上以获得其功能的解释。

tvz2xvvm

tvz2xvvm3#

你只需要捕获两个东西,并把它们都放在替换字符串中。例如,在JavaScript中,你可以这样做:

let line="Managed client:ASB3200418";
console.log(line.replace(/Managed client:(\w)..(\w+)/,"$1$2"));

字符串
输出量:

A3200418

相关问题