我是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)
答案 0 :(得分:1)
您尝试的模式:r'[({ / / })]'
表示:
匹配
(
,{
,,
/
,}
或)
关键是理解regular expression language。每个角色都具有该语言的特殊含义。
r' \({ [^/]*/ / }\) '
等模式会匹配示例中的每个不同部分。
答案 1 :(得分:0)
答案 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*
- 零个或多个空格请注意,单词和标点符号之间的空格应单独处理。
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 .