删除两个句点之间的数字
Remove digits between two fullstops
有什么方法可以删除 python 中两个句号之间的数字吗?
例如:
输入 1:“从 .1 中删除 1。”
输出 1:“从中删除 1。”
输入 2:“XYZ 是学生。2.XYZ 是男孩。3.XYZ 很聪明。”
输出 2:“XYZ 是学生。XYZ 是男孩。XYZ 很聪明。”
我尝试了以下正则表达式,但没有得到首选输出。
output = re.sub(r'([^A-Z].[0-9])+)', input)
您可以尝试在 \s*\.\d+\.
上进行替换,然后只替换为一个句号。
inp = ["remove 1 from .1.", "XYZ is a student.2. XYZ is a boy.3. XYZ is smart."]
output = [re.sub(r'\s*\.\d+\.', '.', x) for x in inp]
print(output)
这会打印:
['remove 1 from.', 'XYZ is a student. XYZ is a boy. XYZ is smart.']
您的代码中有一些值得注意的地方。
使用 re.sub 需要 3 个参数,您提供了 2 个参数。
避免naming your variableinput
您示例中的模式 ([^A-Z].[0-9])+)
不是有效模式,因为末尾有一个不匹配的括号。
如果你删除它,你有这个模式 [^A-Z].[0-9]
它匹配除 A-Z 之外的单个字符,一个匹配任何字符和数字的点。
这意味着该模式可以比预期匹配更多。
如果您不想更改 ip 号码或浮点数,您可以断言匹配前没有数字(并注意转义点以按字面匹配)
该模式与 @Tim Biegeleisen 发布的模式相同,只是前导负后视断言没有前导数字。
(?<!\d)\s*\.\d+\.
例子
import re
strings = ["remove 1 from .1.", "XYZ is a student.2. XYZ is a boy.3. XYZ is smart.", "test 127.0.0.1 test"]
for s in strings:
print(re.sub(r'(?<!\d)\s*\.\d+\.', '.', s))
输出
remove 1 from.
XYZ is a student. XYZ is a boy. XYZ is smart.
test 127.0.0.1 test
有什么方法可以删除 python 中两个句号之间的数字吗?
例如:
输入 1:“从 .1 中删除 1。”
输出 1:“从中删除 1。”
输入 2:“XYZ 是学生。2.XYZ 是男孩。3.XYZ 很聪明。”
输出 2:“XYZ 是学生。XYZ 是男孩。XYZ 很聪明。”
我尝试了以下正则表达式,但没有得到首选输出。
output = re.sub(r'([^A-Z].[0-9])+)', input)
您可以尝试在 \s*\.\d+\.
上进行替换,然后只替换为一个句号。
inp = ["remove 1 from .1.", "XYZ is a student.2. XYZ is a boy.3. XYZ is smart."]
output = [re.sub(r'\s*\.\d+\.', '.', x) for x in inp]
print(output)
这会打印:
['remove 1 from.', 'XYZ is a student. XYZ is a boy. XYZ is smart.']
您的代码中有一些值得注意的地方。
使用 re.sub 需要 3 个参数,您提供了 2 个参数。
避免naming your variable
input
您示例中的模式
([^A-Z].[0-9])+)
不是有效模式,因为末尾有一个不匹配的括号。
如果你删除它,你有这个模式 [^A-Z].[0-9]
它匹配除 A-Z 之外的单个字符,一个匹配任何字符和数字的点。
这意味着该模式可以比预期匹配更多。
如果您不想更改 ip 号码或浮点数,您可以断言匹配前没有数字(并注意转义点以按字面匹配)
该模式与 @Tim Biegeleisen 发布的模式相同,只是前导负后视断言没有前导数字。
(?<!\d)\s*\.\d+\.
例子
import re
strings = ["remove 1 from .1.", "XYZ is a student.2. XYZ is a boy.3. XYZ is smart.", "test 127.0.0.1 test"]
for s in strings:
print(re.sub(r'(?<!\d)\s*\.\d+\.', '.', s))
输出
remove 1 from.
XYZ is a student. XYZ is a boy. XYZ is smart.
test 127.0.0.1 test