正则表达式 - 跳过要匹配的字符

时间:2018-04-06 16:28:47

标签: regex

我遇到了Regex的问题。

我正在尝试匹配T000000123等等。

然而,它搜索的一些行有我可以描述为定位器。这些显示为问号,后跟2位数字,例如?21。 如果要从网站上打印文件,这些定位者会描述一个新职位。

示例:

T123?214567
T?211234567

我需要忽略?21并匹配T1234567

从我所看到的,这是不可能的。 我到处寻找并尝试过多次尝试。

我们所有需要解决的是链接图像。创作者甚至不能确认正则表达式的味道 - 他们相信它的Python,但我不确定。

Regex Image

更新

不幸的是,到目前为止,以下代码都没有奏效。我想在现场测试每个代码(而不是通过正则表达式思考可能工作不同,但遗憾的是仍然没有工作)

没有替换功能,如前所述,我不确定它是否是Python。感谢您的帮助。

5 个答案:

答案 0 :(得分:0)

执行两次正则表达式操作

首先使用正则表达式替换以用空字符串替换定位器。

(\?[0-9]{2})

然后进行正则表达式匹配

T[0-9]{7}

答案 1 :(得分:0)

如果每场比赛只出现一次“定位器”,那么这样的话应该有效:(T.*?)\?\d{2}(.*)

可在此处测试:https://regex101.com/r/XhQXkh/2

基本上,在'?21'序列之前和之后匹配两个捕获组。你需要连接这两个匹配。

答案 2 :(得分:0)

首先,匹配?21并将其重新命名为一个与众不同的角色@

\?21

Demo

你可以试试这个正则表达式找到你想要的东西

(T(?:\d{7}|[\@\d]{8}))\s

Demo ,,,将目标字符串捕获到group 1(或\1)。

最后,将@替换为?21或您喜欢的内容。

Python脚本可能是这样的

ss="""T123?214567
T?211234567
T1234567
T1234434?21
T5435433"""

rexpre= re.compile(r'\?21')
regx= re.compile(r'(T(?:\d{7}|[\@\d]{8}))\s')
for m in regx.findall(rexpre.sub('@',ss)):
    print(m)
print()
for m in regx.findall(rexpre.sub('@',ss)):
    print(re.sub('@',r'?21', m))

输出

T123@4567
T@1234567
T1234567
T1234434@

T123?214567
T?211234567
T1234567
T1234434?21

答案 3 :(得分:0)

如果您使用替换功能是一个选项,那么这可能是匹配T0000001T123?214567的方法:

  • 在第1组T
  • 中的可选部分之前捕获(T\d*)后跟零或更多位数
  • 使问号后跟2位数部分可选(?:\?\d{2})?
  • 在第2组(\d+)之后捕获一个或多个数字。

然后在替换中你可以使用group1group2 \1\2

使用字词边界\b (或者使用断言作为行的开头和结尾^ $,这可能如下所示:

\b(T\d*)(?:\?\d{2})?(\d+)\b

Example Python

答案 4 :(得分:0)

以下是您想要的吗?

Use RegExReplace with multiline tag (m) and enable replace all occurrences!
Pattern = (T\d*)\?\d{2}(\d*)
replace = $1$2

用法示例:

Example 1