[英]How to get a part of a string using a start character and a end character in python
[英]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']
我试着使用split
和find
函数,或者用startswith
和endswith
函数检查布尔类型……但是它并没有真正起作用。
您可以为此使用正则表达式 :
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.