如何从括号中删除字符串,包括带条件的括号?
How to remove a string from brackets including the brackets with a condition?
我有一个类似于 this one 的问题。
我想删除括号和其中的文字,但保留一些文字。例如我有一个列表:
["Going", "(#)", "(maybe)", "to", "the", "(##)", "(mall)", "market"]
我想保留 (#)
和 (##)
,但删除 (maybe)
和 (mall)
。
预期输出:
["Going", "(#)", "to", "the", "(##)", "market"]
列表中可以有任意数量的带括号的单词,就像 'maybe' 和 'mall' .
带有 #
的括号最多可以有 3 个散列。
您可以通过通用方式解析列表并评估单词是否有一对括号。如果是,并且里面的单词不是 #、## 或 ###,那么您应该从输出中排除它。假设您有一个字符串列表:
a = ['Going', '(#)', '(maybe)', 'to', 'the', '(##)', '(mall)', 'market']
output = [word for word in a if ('(' not in word and ')' not in word) or word.strip('()') in ['#', '##', '###']]
print(output)
# ['Going', '(#)', 'to', 'the', '(##)', 'market']
strip
方法仅保留给定参数内的字符串(在本例中为 (
和 )
)。
您可以在此处了解有关列表理解的更多信息:https://www.w3schools.com/python/python_lists_comprehension.asp
您可以使用 list-comprehension 使用正则表达式过滤原始列表:
import re
a = ["Going", "(#)", "(maybe)", "to", "the", "(##)", "(mall)", "market"]
b = [word for word in a if re.match(r"[^(]|\(#{1,3}\)", word)]
给出:
['Going', '(#)', 'to', 'the', '(##)', 'market']
re.match
从字符串的开头匹配模式。该模式表示:
[^(]
- 任何字符 除了 (
.
|
- 或者...
\(
- 文字括号
#{1,3}
- #
重复 1 到 3 次
\)
- 文字括号
我有一个类似于 this one 的问题。
我想删除括号和其中的文字,但保留一些文字。例如我有一个列表:
["Going", "(#)", "(maybe)", "to", "the", "(##)", "(mall)", "market"]
我想保留 (#)
和 (##)
,但删除 (maybe)
和 (mall)
。
预期输出:
["Going", "(#)", "to", "the", "(##)", "market"]
列表中可以有任意数量的带括号的单词,就像 'maybe' 和 'mall' .
带有 #
的括号最多可以有 3 个散列。
您可以通过通用方式解析列表并评估单词是否有一对括号。如果是,并且里面的单词不是 #、## 或 ###,那么您应该从输出中排除它。假设您有一个字符串列表:
a = ['Going', '(#)', '(maybe)', 'to', 'the', '(##)', '(mall)', 'market']
output = [word for word in a if ('(' not in word and ')' not in word) or word.strip('()') in ['#', '##', '###']]
print(output)
# ['Going', '(#)', 'to', 'the', '(##)', 'market']
strip
方法仅保留给定参数内的字符串(在本例中为 (
和 )
)。
您可以在此处了解有关列表理解的更多信息:https://www.w3schools.com/python/python_lists_comprehension.asp
您可以使用 list-comprehension 使用正则表达式过滤原始列表:
import re
a = ["Going", "(#)", "(maybe)", "to", "the", "(##)", "(mall)", "market"]
b = [word for word in a if re.match(r"[^(]|\(#{1,3}\)", word)]
给出:
['Going', '(#)', 'to', 'the', '(##)', 'market']
re.match
从字符串的开头匹配模式。该模式表示:
[^(]
- 任何字符 除了(
.|
- 或者...\(
- 文字括号#{1,3}
-#
重复 1 到 3 次
\)
- 文字括号