繁体   English   中英

蟒蛇。 分割一部分以特定字符开头和以字符结尾的字符串

[英]Python. slice a part of the string that begins with a specific character and end with a character

我想在选择的角色之后提取信息,然后在选择的角色之前停止; 例如,从*提取并以空格结尾,然后将识别出的单词放入新列表中。

>>> extract_star('*we are *engineers *happy very *much')
['we', 'engineers', 'happy', 'much']

我试着使用splitfind函数,或者用startswithendswith函数检查布尔类型……但是它并没有真正起作用。

您可以为此使用正则表达式

import re

def extract_star(s):
    return re.findall(r'\*(.+?)\b', s)

extract_star('*we are *engineers *happy very *much')
# ['we', 'engineers', 'happy', 'much']

这会收集所有.+? 组(非贪婪的任何一个或多个),后跟一个'*'和一个单词边界'\\b' (如果有空格,您会错过最后一个匹配项)。

看来您已接近所知道的方法:

  • 在空格处分割字符串
  • 查找以*开头的元素
  • 保留那些元素的其余部分

    extract_star(s):单词= s.split()star_words = [如果word.startswith('*')],则以单词为单位的单词结果= [star_words中的单词为word [1:]返回结果

...或者用一种表达方式...

return [word[1:] for word in s.split() if word.startswith('*')]

您可以用'*'分割,忽略空字符串,用空格分割,然后提取第0个值:

def extract_star(x):
    return [i.split(maxsplit=1)[0] for i in x.split('*') if i]

res = extract_star('*we are *engineers *happy very *much')

['we', 'engineers', 'happy', 'much']

或功能上:

from operator import itemgetter

def extract_star(x):
    return list(map(itemgetter(0), map(str.split, filter(None, x.split('*')))))

其余部分提供了很多选择,以字符开头的方式进行显示。

如果它不是以特殊字符开头 (即使是),则可以尝试执行以下操作。

def extract_star(sentence, sc = '*'):
    mywords = sentence.split()
    res = [word[:word.find(sc)] + word[word.find(sc) + 1:] for word in mywords if sc in word]
    return res

result = extract_star('*we are *engineers *happy very *much')
result = extract_star('*we are *engineers *happy very m*uch')

['we', 'engineers', 'happy', 'much']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM