我正在处理一个Json文件,特别是'context'下的文本(请参见代码)。
正如您在代码中看到的那样,我使用3个while循环只是为了在3种情况下做到这一点。我想知道是否有更好的方法来实现这一目标。
locale = sc._jvm.java.util.Locale
locale.setDefault(locale.forLanguageTag("en-US"))
我还想知道是否有一种方法可以删除双精度空格并将其设为单个空格。
答案 0 :(得分:1)
要做正则表达式部分:
>>> import re
>>> s = 'Hello ? World !'
>>> re.sub('\s+(?=[.,?!])','',s)
'Hello? World!'
>>>
答案 1 :(得分:1)
我们可能希望表达式传递除空格以外的所有内容,后跟标点字符列表和换行符。
也许,让我们开始:
([\s\S].*?)(\s,|\s\.|\s!|\s\?|\s;|\s:|\s\|)?
我们可以有两个捕获组。第一个传递所有内容,第二个传递不包含由逻辑“或”分隔的实例列表,如果需要,也可以将其简化。
如果不需要此表达式,可以在regex101.com中对其进行修改或更改。
jex.im还有助于可视化表达式。
此代码段只是为了表示该表达式可能有效:
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);
# 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.