我遇到了Regex的问题。
我正在尝试匹配T0000001
(2
,3
等等。
然而,它搜索的一些行有我可以描述为定位器。这些显示为问号,后跟2位数字,例如?21
。
如果要从网站上打印文件,这些定位者会描述一个新职位。
示例:
T123?214567
T?211234567
我需要忽略?21
并匹配T1234567
。
从我所看到的,这是不可能的。 我到处寻找并尝试过多次尝试。
我们所有需要解决的是链接图像。创作者甚至不能确认正则表达式的味道 - 他们相信它的Python,但我不确定。
不幸的是,到目前为止,以下代码都没有奏效。我想在现场测试每个代码(而不是通过正则表达式思考可能工作不同,但遗憾的是仍然没有工作)
没有替换功能,如前所述,我不确定它是否是Python。感谢您的帮助。
答案 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
你可以试试这个正则表达式找到你想要的东西
(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)
如果您使用替换功能是一个选项,那么这可能是匹配T0000001
或T123?214567
的方法:
T
(T\d*)
后跟零或更多位数
(?:\?\d{2})?
(\d+)
之后捕获一个或多个数字。然后在替换中你可以使用group1group2 \1\2
。
使用字词边界\b
(或者使用断言作为行的开头和结尾^
$
),这可能如下所示:
答案 4 :(得分:0)