在字符串中查找子字符串旁边的所有分隔符,并在python中替换

2024-05-17 00:07:13 发布

您现在位置:Python中文网/ 问答频道 /正文

示例字符串:

s = "<sec>John</sec> said hi to a woman (named <sec>Mary)</sec>"

我需要将此转换为:

s = "<sec>John</sec> said hi to a woman (named <sec>Mary</sec>)"

这将需要对开始和结束标记以及所有分隔符(如“.”、“、”、“-”、“(”、“)”等)都起作用。你知道吗

我可以搜索并替换“)”等等,但显然我想要更性感一点的。你知道吗

所以基本上把所有的分隔符移到标签外面。你知道吗

谢谢!你知道吗


Tags: to字符串标记示例标签sechijohn
2条回答

下面的正则表达式可以帮助您将出现在开始和结束标记中的分隔符移动到结束标记的下一个。你知道吗

(<sec>)([^.,()-]*)([.,()-])(<\/sec>)

替换字符串:

\1\2\4\3

DEMO

>>> s = "<sec>John</sec> said hi to a woman (named <sec>Mary)</sec>"
>>> re.sub(r'(<sec>)([^.,()-]*)([.,()-])(<\/sec>)', r'\1\2\4\3', s)
'<sec>John</sec> said hi to a woman (named <sec>Mary</sec>)'

这适用于任何标签

>>> s = "<sec>John</sec> said hi to a woman (named <sec>Mary)</sec>"
>>> re.sub(r'(<(\S+?\b)[^>]*>)([^.,()-]*)([.,()-])(<\/\2>)', r'\1\3\5\4', s)
'<sec>John</sec> said hi to a woman (named <sec>Mary</sec>)'

另一个正则表达式变体:

>>> s = "Nicely<sec>, John</sec> said hi to a woman (named <sec>Mary)</sec>"
>>> re.sub(r'((?:<[^>]+>)?)( *[-.(),]+ *)((?:</[^>]+>)?)',r'\3\2\1',s)
#                           ^^        ^^
#                  move spaces with the punctuation
#                     remove that if not needed

'Nicely, <sec>John</sec> said hi to a woman (named <sec>Mary</sec>)'

这个想法是交换开头的标签↔ 标点符号标点符号↔ 结束标记。你知道吗

相关问题 更多 >