使用 re sub 替换匹配的子字符串
Replace matched susbtring using re sub
有没有办法使用单个 re.sub()
行替换匹配的模式子字符串?。
我想避免的是对当前 re.sub()
输出使用字符串替换方法。
Input = "/J&L/LK/Tac1_1/shareloc.pdf"
Current output using re.sub("[^0-9_]", "", input): "1_1"
Desired output in a single re.sub use: "1.1"
根据文档,re.sub
定义为
re.sub(pattern, repl, string, count=0, flags=0)
If repl
is a function, it is called for every non-overlapping occurrence of pattern.
这就是说,如果你传递一个lambda函数,你可以将代码保留在一行中。此外,请记住匹配的字符可以通过以下方式更容易地访问单个组:x[0]
.
我从正则表达式中删除了 _
以获得所需的输出。
txt = "/J&L/LK/Tac1_1/shareloc.pdf"
x = re.sub("[^0-9]", lambda x: '.' if x[0] is '_' else '', txt)
print(x)
无法使用 Python re.sub
中的字符串替换模式来替换两个可能的字符串,因为 Python [=11] 中不支持条件替换构造=].所以, 或使用其他 work-arounds.
您似乎只希望输入字符串中有一个 <DIGITS>_<DIGITS>
匹配项。在这种情况下,您可以使用
import re
text = "/J&L/LK/Tac1_1/shareloc.pdf"
print( re.sub(r'^.*?(\d+)_(\d+).*', r'.', text, flags=re.S) )
# => 1.1
见Python demo. See the regex demo。 详情:
^
- 字符串开头
.*?
- 尽可能少的零个或多个字符
(\d+)
- 第 1 组:一个或多个数字
_
- 一个 _
字符
(\d+)
- 第 2 组:一个或多个数字
.*
- 尽可能多的零个或多个字符。
有没有办法使用单个 re.sub()
行替换匹配的模式子字符串?。
我想避免的是对当前 re.sub()
输出使用字符串替换方法。
Input = "/J&L/LK/Tac1_1/shareloc.pdf"
Current output using re.sub("[^0-9_]", "", input): "1_1"
Desired output in a single re.sub use: "1.1"
根据文档,re.sub
定义为
re.sub(pattern, repl, string, count=0, flags=0)
If
repl
is a function, it is called for every non-overlapping occurrence of pattern.
这就是说,如果你传递一个lambda函数,你可以将代码保留在一行中。此外,请记住匹配的字符可以通过以下方式更容易地访问单个组:x[0]
.
我从正则表达式中删除了 _
以获得所需的输出。
txt = "/J&L/LK/Tac1_1/shareloc.pdf"
x = re.sub("[^0-9]", lambda x: '.' if x[0] is '_' else '', txt)
print(x)
无法使用 Python re.sub
中的字符串替换模式来替换两个可能的字符串,因为 Python [=11] 中不支持条件替换构造=].所以,
您似乎只希望输入字符串中有一个 <DIGITS>_<DIGITS>
匹配项。在这种情况下,您可以使用
import re
text = "/J&L/LK/Tac1_1/shareloc.pdf"
print( re.sub(r'^.*?(\d+)_(\d+).*', r'.', text, flags=re.S) )
# => 1.1
见Python demo. See the regex demo。 详情:
^
- 字符串开头.*?
- 尽可能少的零个或多个字符(\d+)
- 第 1 组:一个或多个数字_
- 一个_
字符(\d+)
- 第 2 组:一个或多个数字.*
- 尽可能多的零个或多个字符。