所以我想用空格从文本中分隔标点组。
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' !!'正确?
谢谢:)
答案 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
很明显,那么正则表达式部分并不是什么大问题。只是使用正确的功能。
希望这有帮助!如果您有任何疑问,请发表评论。 :)
参考文献: