Python中如何从指定格式字符串提取单词?解决含空格边缘案例
问题:提取选项文本时避免拆分多词内容
我有如下格式的字符串:
string = "[A] Assam[B] Meghalaya[C] West Bengal[D] Odisha " 期望输出 = ['Assam', 'Meghalaya','West Bengal','Odisha']
尝试了多种方法,但总会把West Bengal拆分成两部分,没法处理这种边缘情况。试过把字符串传入下面的函数后再拆分,但没成功:
def remove_alpha(string): option = ['[A]', '[B]', '[C]', '[D]'] res = "" for i in option: res = string.replace(i, '') string = res return res
解决方法
核心问题是不能用空格拆分——因为选项本身可能包含空格。用正则表达式可以精准匹配每个选项的边界,直接提取或分割出完整的选项内容。
方法1:正则匹配提取
直接匹配[X]标记后到下一个标记或字符串结尾的内容,确保完整捕获多词选项:
import re string = "[A] Assam[B] Meghalaya[C] West Bengal[D] Odisha " # 正则模式:匹配 [字母] 后,捕获所有内容直到下一个 [字母] 或字符串结束 pattern = r'\[\w\]\s*(.*?)(?=\[\w\]|$)' result = re.findall(pattern, string) # 清理每个选项的首尾空格 result = [item.strip() for item in result] print(result) # 输出: ['Assam', 'Meghalaya', 'West Bengal', 'Odisha']
方法2:正则分割
以[X]作为分隔符分割字符串,再过滤无效内容并清理空格:
import re string = "[A] Assam[B] Meghalaya[C] West Bengal[D] Odisha " # 用 [字母] 作为分隔符拆分字符串 parts = re.split(r'\[\w\]', string) # 过滤空字符串,同时去除每个部分的首尾空格 result = [part.strip() for part in parts if part.strip()] print(result) # 输出: ['Assam', 'Meghalaya', 'West Bengal', 'Odisha']
原方法失败原因
你的remove_alpha函数会把所有[X]标记替换为空,得到的字符串是Assam Meghalaya West Bengal Odisha,如果按空格拆分,自然会把West和Bengal拆成两个元素——这就是为什么处理不了多词选项的原因。
内容的提问来源于stack exchange,提问作者Anshuman Sharma
相关产品推荐
相关产品推荐

