仅当符号 next/prior 对应 python 中的单词时才删除符号
removing symbol only when they are next/prior to a word in python
我想删除单词中的冒号 (:) next/prior,但不删除数字中的冒号 next/prior(例如,及时)。意思是,我不希望及时删除冒号,只删除与单词相关的冒号。
示例输入:
2018-05-21T00:00:00+02:00
00:00:00
00:00
:light at 07:15:0000
:occurence1
:occurence2
light: at 07:15:0000
occurence1:
occurence2:
预期输出:(删除单词的冒号 next/prior)
2018-05-21T00:00:00+02:00
00:00:00
00:00
light at 07:15:0000
occurence1
occurence2
light at 07:15:0000
occurence1
occurence2
我可以用正则表达式模式匹配它们:([A-Za-z_]\w*:|:[A-Za-z_]\w*)
。但无法删除冒号 re.sub()
.
如何使用 python3.8 with/without 正则表达式执行此操作?
在这部分[A-Za-z_]\w*:
中,\w
也匹配数字导致匹配过多。在第二种模式中,您可以省略末尾的 \w*
,因为它是可选的,在替换中不是必需的。
您还匹配了整个部分,而不是没有 :
的部分,并且使用带有 re.sub 的整个部分将导致删除匹配的所有内容。
您可以使用 2 个单独的组,其中第一个组可以捕获可选数字,匹配 :
而后跟一个数字并在替换中使用这些组。
([A-Za-z_]\d*):(?!\d)|:([A-Za-z_])
import re
regex = r"([A-Za-z_]\d*):(?!\d)|:([A-Za-z_])"
s = ("2018-05-21T00:00:00+02:00\n"
"00:00:00\n"
"00:00\n"
":light at 07:15:0000\n\n"
":occurence1\n"
":occurence2\n\n"
"light: at 07:15:0000\n\n"
"occurence1:\n"
"occurence2:")
result = re.sub(regex, r"", s)
if result:
print (result)
输出
2018-05-21T00:00:00+02:00
00:00:00
00:00
light at 07:15:0000
occurence1
occurence2
light at 07:15:0000
occurence1
occurence2
由 Wiktor Stribiżew 评论的环视变体,带有额外的交替断言左侧有数字而右侧没有数字。
(?<=[A-Za-z]):|:(?=[A-Za-z])|(?<=\d):(?!\d)
我想删除单词中的冒号 (:) next/prior,但不删除数字中的冒号 next/prior(例如,及时)。意思是,我不希望及时删除冒号,只删除与单词相关的冒号。
示例输入:
2018-05-21T00:00:00+02:00
00:00:00
00:00
:light at 07:15:0000
:occurence1
:occurence2
light: at 07:15:0000
occurence1:
occurence2:
预期输出:(删除单词的冒号 next/prior)
2018-05-21T00:00:00+02:00
00:00:00
00:00
light at 07:15:0000
occurence1
occurence2
light at 07:15:0000
occurence1
occurence2
我可以用正则表达式模式匹配它们:([A-Za-z_]\w*:|:[A-Za-z_]\w*)
。但无法删除冒号 re.sub()
.
如何使用 python3.8 with/without 正则表达式执行此操作?
在这部分[A-Za-z_]\w*:
中,\w
也匹配数字导致匹配过多。在第二种模式中,您可以省略末尾的 \w*
,因为它是可选的,在替换中不是必需的。
您还匹配了整个部分,而不是没有 :
的部分,并且使用带有 re.sub 的整个部分将导致删除匹配的所有内容。
您可以使用 2 个单独的组,其中第一个组可以捕获可选数字,匹配 :
而后跟一个数字并在替换中使用这些组。
([A-Za-z_]\d*):(?!\d)|:([A-Za-z_])
import re
regex = r"([A-Za-z_]\d*):(?!\d)|:([A-Za-z_])"
s = ("2018-05-21T00:00:00+02:00\n"
"00:00:00\n"
"00:00\n"
":light at 07:15:0000\n\n"
":occurence1\n"
":occurence2\n\n"
"light: at 07:15:0000\n\n"
"occurence1:\n"
"occurence2:")
result = re.sub(regex, r"", s)
if result:
print (result)
输出
2018-05-21T00:00:00+02:00
00:00:00
00:00
light at 07:15:0000
occurence1
occurence2
light at 07:15:0000
occurence1
occurence2
由 Wiktor Stribiżew 评论的环视变体,带有额外的交替断言左侧有数字而右侧没有数字。
(?<=[A-Za-z]):|:(?=[A-Za-z])|(?<=\d):(?!\d)