Python使用REGEX删除文本中的标点符号

时间:2019-05-20 02:56:11

标签: python regex python-3.x regex-lookarounds regex-greedy

我正在处理一个Json文件,特别是'context'下的文本(请参见代码)。

正如您在代码中看到的那样,我使用3个while循环只是为了在3种情况下做到这一点。我想知道是否有更好的方法来实现这一目标。

locale = sc._jvm.java.util.Locale
locale.setDefault(locale.forLanguageTag("en-US"))

我还想知道是否有一种方法可以删除双精度空格并将其设为单个空格。

2 个答案:

答案 0 :(得分:1)

要做正则表达式部分:

>>> import re
>>> s = 'Hello ? World !'
>>> re.sub('\s+(?=[.,?!])','',s)
'Hello? World!'
>>> 

答案 1 :(得分:1)

我们可能希望表达式传递除空格以外的所有内容,后跟标点字符列表和换行符。

也许,让我们开始:

([\s\S].*?)(\s,|\s\.|\s!|\s\?|\s;|\s:|\s\|)?

我们可以有两个捕获组。第一个传递所有内容,第二个传递不包含由逻辑“或”分隔的实例列表,如果需要,也可以将其简化。

enter image description here

RegEx

如果不需要此表达式,可以在regex101.com中对其进行修改或更改。

RegEx电路

jex.im还有助于可视化表达式。

enter image description here

演示

此代码段只是为了表示该表达式可能有效:

const regex = /([\s\S].*?)(\s,|\s\.|\s!|\s\?|\s;|\s:|\s\|)?/gm;
const str = `Start with some text Hello ? World ! Hello , World . Hello ; World | Hello : Hello? World! Hello, World. Hello; World| Hello:Hello ? World ! Hello , World . Hello ; World | Hello : Hello? World! Hello, World. Hello; World| Hello: and some other text after`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

Python测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"([\s\S].*?)(\s,|\s\.|\s!|\s\?|\s;|\s:|\s\|)?"

test_str = "Start with some text Hello ? World ! Hello , World . Hello ; World | Hello : Hello? World! Hello, World. Hello; World| Hello:Hello ? World ! Hello , World . Hello ; World | Hello : Hello? World! Hello, World. Hello; World| Hello: and some other text after"

subst = "\\1"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.