这就是字符串拆分现在对我有用的方法:
highlightjs
但我想知道是否有更多的pythonic方法可以做到。
目标是在'} / n}'之前获取所有内容,包括'} / n}'。
答案 0 :(得分:1)
这可能是对str.partition
的好用。
Select DISTINCT
so.num AS Ref
, so.shiptoname AS Recipient_Full_Name
, so.shiptoaddress AS Address_1
, so.shiptocity AS City
, stateconst.name AS State
, so.shiptozip AS Zip
, so.billtoname AS Buyer_Name
, contact.datus AS Buyer_Email
, qbclass.name AS Class
, carrier.name AS Carrier
, CAST(soitem.datescheduledfulfillment as date) AS Fulfillment_Date
From SO
JOIN stateconst
ON so.shiptostateid=stateconst.id
JOIN qbclass
ON so.qbclassid=qbclass.id
JOIN soitem
ON so.id=soitem.soid
JOIN carrier
ON so.carrierid=carrier.id
JOIN contact
ON so.customerid=customer.id
ON customer.accountid=contact.accountid
WHERE CAST(soitem.datescheduledfulfillment as date) = '5/16/16'
AND qbclass.name<>'C- Online' AND qbclass.name<>'InterCompany'
或者,您可以使用str.index
明确找到它。
string = '012za}/n}ddfsdfk'
parts = string.partition('}/n}')
# ('012za', '}/n}', 'ddfsdfk')
''.join(parts[:-1])
# 012za}/n}
这可能比使用str.find
更好,因为如果找不到子字符串会引发异常,而不是产生无意义的结果。
似乎任何“更优雅”都需要正则表达式。
repl = '}/n}'
string[:string.index(repl) + len(repl)]
# 012za}/n}
答案 1 :(得分:0)
可以使用re.split()
完成 - 关键是在分割模式周围放置parens以保留您分割的内容:
import re
output = "".join(re.split(r'(}/n})', string.encode('UTF8'))[:2])
然而,我怀疑这是实现你想要的最有效也是最恐怖的方式。即我不认为这自然是一个拆分类问题。例如:
tag = '}/n}'
encoded = string.encode('UTF8')
output = encoded[:encoded.index(tag)] + tag
或者如果你坚持单行:
output = (lambda string, tag: string[:string.index(tag)] + tag)(string.encode('UTF8'), '}/n}')
或返回正则表达式:
output = re.match(r".*}/n}", string.encode('UTF8')).group(0)
答案 2 :(得分:0)
>>> string_to_split = 'first item{\n{second item'
>>> sep = '{\n{'
>>> output = [item + sep for item in string_to_split.split(sep)]
NOTE: output = ['first item{\n{', 'second item{\n{']
然后你可以使用结果:
for item_with_delimiter in output:
...
如果您不确定行结尾是什么,查找os.linesep
可能会有用。 os.linesep
是您当前操作系统下的行结尾,因此Windows下的'\r\n'
或Linux或Mac下的'\n'
。这取决于输入数据来自何处,以及您的代码在整个环境中的灵活程度。
答案 3 :(得分:-1)
改编自Slice a string after a certain phrase?,您可以结合使用find和slice来获取字符串的第一部分并保留}/n}
。
str = "012za}/n}ddfsdfk"
str[:str.find("}/n}")+4]
将导致012za}/n}