Python正则表达式用正则表达式删除单词

时间:2016-01-21 16:20:10

标签: python regex

我是Python的新手,我想删除并用空格替换({ / / }),下面的示例

原句:

NULL ({ / / }) Regina ({ 4 p1 p2 / / }) Shueller ({ 5 p1 p2 / / }) works ({ / / }) for ({ / / }) Italy ({ 14 / / }) 's ({ 15 / / }) La ({ 16 / / }) Repubblica ({ 17 / / }) newspaper ({ 18 / / }) . ({ 38 / / })

转换为:

Regina Shueller works for Italy 's La Repubblica newspaper.

我已尝试过此代码,但这不是我的预期

Sentence = re.sub(r'[({ / / })]',' ', sentence)

4 个答案:

答案 0 :(得分:1)

您尝试的模式:r'[({ / / })]'表示:

  

匹配({/})

关键是理解regular expression language。每个角色都具有该语言的特殊含义。

r' \({ [^/]*/ / }\) '等模式会匹配示例中的每个不同部分。

答案 1 :(得分:0)

你可以这样做:

log()

使用 live demo

答案 2 :(得分:0)

如果格式始终相同,您可以尝试在删除标点符号后保留alpha:

from string import punctuation
print(" ".join([w for w in s.split() if w.strip(punctuation).isalpha()]))

或使用正则表达式:

print(re.sub(r'\({.*?}\)',"",s))

无论预期输出中的内容是什么,您都会删除({})的所有内容。

答案 3 :(得分:0)

您可以使用

r'\s*(?:\(\{[^/]*/\s*/\s*}\)|NULL)\s*'

请参阅regex demo

正则表达式解释

  • \s* - 零个或多个空格
  • (?:\(\{[^/]*/\s*/\s*}\)|NULL) - 两个替代方案,NULL\(\{[^/]*/\s*/\s*}\)匹配......
    • \( - 打开圆括号
    • \{ - 大括号
    • [^/]* - 除/
    • 以外的零个或多个字符
    • / - 文字/
    • \s* - 零个或多个空格
    • /\s* - 同上。
    • } - 一个大括号
    • \) - 结束圆括号
  • \s* - 零个或多个空格

请注意,单词和标点符号之间的空格应单独处理。

Python demo

import re
p = r'\s*(?:\(\{[^/]*/\s*/\s*}\)|NULL)\s*'
test_str = "NULL ({ / / }) Regina ({ 4 p1 p2 / / }) Shueller ({ 5 p1 p2 / / }) works ({ / / }) for ({ / / }) Italy ({ 14 / / }) 's ({ 15 / / }) La ({ 16 / / }) Repubblica ({ 17 / / }) newspaper ({ 18 / / }) . ({ 38 / / })"
result = re.sub(p, " ", test_str)
print(result.strip())
# => Regina Shueller works for Italy 's La Repubblica newspaper .
相关问题