Python如何将标点与文本

时间:2016-11-30 08:41:25

标签: python regex

所以我想用空格从文本中分隔标点组。

my_text = "!where??and!!or$$then:)"

我希望得到一个! where ?? and !! or $$ then :)

我想在Javascript中使用$1来获取匹配的字符串。到目前为止我尝试了什么:

my_matches = re.findall('[!"\$%&\'()*+,\-.\/:;=#@?\[\\\]^_`{|}~]*', my_text)

此处my_matches为空,因此我必须从表达式中删除\\\

my_matches = re.findall('[!"\$%&\'()*+,\-.\/:;=#@?\^_`{|}~]*', my_text)

我有这个结果:

['!', '', '', '', '', '', '??', '', '', '', '!!', '', '', '$$', '', '', '', '',
':)', '']

所以我删除了所有冗余条目:

my_matches_distinct = list(set(my_matches))

我的结果更好:

['', '??', ':)', '$$', '!', '!!']

然后我自己和空间替换每场比赛:

for match in my_matches:
if match != '':
    my_text = re.sub(match, ' ' + match + ' ', my_text)

当然它没有用!我试图把比赛作为一个字符串,但它也没有工作...当我试图直接放置字符串来替换它的工作虽然。

但我认为我做得不对,因为我会遇到问题!' et' !!'正确?

谢谢:)

2 个答案:

答案 0 :(得分:1)

建议在定义正则表达式模式时使用原始字符串文字。此外,不要在字符类中转义任意符号,只有\必须始终转义,而其他符号可以放置,以便它们不需要转义。此外,由于*,你的正则表达式匹配一个空字符串 - 它确实匹配。替换为+量词。此外,如果要从字符串中删除这些符号,请直接使用re.sub

import re
my_text = "!where??and!!or$$then:)"
print(re.sub(r'[]!"$%&\'()*+,./:;=#@?[\\^_`{|}~-]+', r' \g<0> ', my_text).strip())

请参阅Python demo

详细信息[]!"$%&\'()*+,./:;=#@?[\^_`{|}~-]+匹配集合中的任何1个以上的符号(请注意,自\结尾使用-时,此处仅]进行转义,和\g<0>在类的开头),替换插入一个空格+整个匹配(.strip()是整个匹配的反向引用)和一个空格。在正则表达式处理完字符串后,ping(n-1)将删除前导/尾随空格。

答案 1 :(得分:0)

sub()库中使用re方法。您可以按照以下方式执行此操作,

import re
str = '!where??and!!or$$then:)'
print re.sub(r'([!@#%\^&\*\(\):;"\',\./\\]+)', r' \1 ', str).strip()

我希望这段代码可以解决您的问题。如果您对regex很明显,那么正则表达式部分并不是什么大问题。只是使用正确的功能。

希望这有帮助!如果您有任何疑问,请发表评论。 :)

参考文献:

Python re library