什么正则表达式能够匹配冒号包裹的字符串,然后匹配其余的字符串段,即使存在单个冒号?

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

示例字符串输入: “这是一个 :key: ,这是 :anotherKey: 但这:是普通文本。”

我似乎无法找出将返回上述字符串的以下匹配项的正则表达式模式:

  1. This is a 
  2. :key:
  3.  and this is 
  4. :anotherkey:
  5.  but this: is normal text.

下面是我尝试过的表达式及其输出的描述

  1. (:\S+:(?!\S)|[^:]+)
    • enter image description here
    • 独立冒号不匹配
  2. (:\S+:(?!\S)|[^:]+|:)
    • enter image description here
    • 独立的冒号是匹配的,但都是独立的
  3. (:\S+:(?!\S)|[^:]+(:|$))
    • enter image description here
    • 每个冒号都是单独匹配的(这个相差很远)
  4. [更多的尝试只会变得更糟]
regex
1个回答
0
投票

要解析出冒号包裹的字符串,同时保留单个冒号,您可以使用正则表达式来匹配用两个冒号 (:wrapped:) 包裹的字符串,但不匹配单个冒号。

正则表达式模式说明:

(?

:([^:]+):: 匹配冒号包裹的字符串。 ([^:]+) 捕获非冒号的任何字符序列,并包裹在两个冒号之间。

(?!:):负向前视以确保当前冒号后面没有另一个冒号(这可以避免匹配 ::wrapped::)。

正则表达式模式:

(?

说明:

  1. (?

  2. :([^:]+):: 匹配以单个冒号开头和结尾且包含除冒号之外的任何字符的字符串。

  3. (?!:):确保匹配后的冒号后面不会跟着另一个冒号。

用法示例:

输入: “你好:name:,你好吗?::this:: 用两个冒号括起来,:single: this 用一个冒号括起来。”

输出(匹配):

:姓名:

:单个:

实践(Python 示例):

重新导入

text = “你好:name:,你好吗?::this:: 用两个冒号括起来,:single: this 用一个冒号括起来。” 匹配 = re.findall(r'(?

打印(匹配)

输出:

['姓名','单身']

这将仅匹配和提取冒号包裹的字符串,例如 :name: 和 :single:,但会跳过 ::this::。

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