Python 如何在模式之后提取子字符串
我对Python相当陌生。我想知道在特定模式之后提取子字符串的最佳方法。模式是以下前缀-后缀。我想隔离后缀。我可以保证前缀只包含字母,但我不能保证其长度。另一方面,后缀可能包含空格和连字符;它可以是任何字符。我只需要去掉前缀,保留“后缀”Python 如何在模式之后提取子字符串,python,Python,我对Python相当陌生。我想知道在特定模式之后提取子字符串的最佳方法。模式是以下前缀-后缀。我想隔离后缀。我可以保证前缀只包含字母,但我不能保证其长度。另一方面,后缀可能包含空格和连字符;它可以是任何字符。我只需要去掉前缀,保留“后缀” """ Example input: Intern - RVA-QA PK Fulltime - VA - BN146 Intern - STP_NA Intern - ZXU RMP LM Desired result: RV
"""
Example input:
Intern - RVA-QA PK
Fulltime - VA - BN146
Intern - STP_NA
Intern - ZXU RMP LM
Desired result:
RVA-QA PK
VA - BN146
STP_NA
ZXU RMP LM
"""
实现这一目标的最佳方式是什么?我有以下代码,但它不完全符合我的要求:
import sqlalchemy
url = 'mysql://scott:tiger@localhost/test'
engine = create_engine(url)
db = engine.connect()
# Construct Query
query = "SELECT name FROM items"
# Obtain table information
item_list = db.execute(query)
# Declare list that will hold the results
result_list = []
for item in item_list:
result_list.append(item[0].rsplit('-', 1)[1].strip())
return result_list
你会推荐我使用正则表达式吗?还是有更好的办法?任何建议或帮助都将不胜感激
谢谢您可以使用python的拆分和剥离功能。 Split返回一个块数组。 例如 m_string=I-have-got-an-example result1=m_string.split'-' “result1”是['I','have','got','an','example'] 只有在使用这个选项时,才会有空格,所以也必须使用strip 你可以试试这个例子。 `m_string=I-have-got-an-example 结果=[x.strip for x in m_string.split'-'] 结果是[我,已经,得到,一个例子] `
我希望这将对您有所帮助。您可以使用python的拆分和剥离功能。 Split返回一个块数组。 例如 m_string=I-have-got-an-example result1=m_string.split'-' “result1”是['I','have','got','an','example'] 只有在使用这个选项时,才会有空格,所以也必须使用strip 你可以试试这个例子。 `m_string=I-have-got-an-example 结果=[x.strip for x in m_string.split'-'] 结果是[我,已经,得到,一个例子] `
我希望这将对您有所帮助。如果您想更换之前的任何产品- 试试看:
import re
str = "example - postfix"
re.sub(".+-", "", str)
输出:
"postfix"
我在这里使用正则表达式。如果要替换之前的任何内容,也可以使用str.split-[1]- 试试看:
import re
str = "example - postfix"
re.sub(".+-", "", str)
输出:
"postfix"
我在这里使用正则表达式。您也可以使用str.split-[1]纠正方案如下:
for item in item_list:
result_list.append(item[0].split(' - ', 1)[1].strip())
感谢所有的答案。纠正方案如下:
for item in item_list:
result_list.append(item[0].split(' - ', 1)[1].strip())
谢谢您的回答。我认为您不需要使用正则表达式,因为您只需要在特定字符序列首次出现后提取子字符串 index方法返回字符串中的子字符串的索引,如果有多个子字符串,则返回第一个子字符串,因此使用此方法查找分隔符的位置。您可以很容易地提取后缀与字符串切片之后 下面的代码应该打印后缀 用你的例子试试这个。
我认为您不需要使用正则表达式,因为您只需要在特定字符序列首次出现后提取子字符串 index方法返回字符串中的子字符串的索引,如果有多个子字符串,则返回第一个子字符串,因此使用此方法查找分隔符的位置。您可以很容易地提取后缀与字符串切片之后 下面的代码应该打印后缀 用你的例子试试这个。
这是我能想出的最短的正则表达式,它返回了你想要的。这个答案希望能处理所有的边缘情况,比如在你想要的字符串中有破折号。但是,存在一些间距问题
import re
the_str = """
Intern - RVA-QA PK
Fulltime - VA - BN146
Intern - STP_NA
Intern - ZXU RMP LM
"""
reg = re.compile("\n.*?- ")
a = re.sub(reg,"\n",the_str)
print(a)
返回:
RVA-QA PK
VA - BN146
STP_NA
ZXU RMP LM
由于多行字符串,间距很奇怪,但您可以将其删除。
第二个正则表达式是
import re
the_str = """
Intern - RVA-QA PK
Fulltime - VA - BN146
Intern - STP_NA
Intern - ZXU RMP LM
"""
reg = re.compile("\n.*?- (.*)")
a = re.findall(reg,the_str)
print(a)
这将返回所有正确答案的数组,没有任何间距问题。
输出:
['RVA-QA PK','VA-BN146','STP_NA','ZXU RMP LM']
希望这有帮助 这是我能想出的最短的正则表达式,它返回了你想要的。这个答案希望能处理所有的边缘情况,比如在你想要的字符串中有破折号。但是,存在一些间距问题
import re
the_str = """
Intern - RVA-QA PK
Fulltime - VA - BN146
Intern - STP_NA
Intern - ZXU RMP LM
"""
reg = re.compile("\n.*?- ")
a = re.sub(reg,"\n",the_str)
print(a)
返回:
RVA-QA PK
VA - BN146
STP_NA
ZXU RMP LM
由于多行字符串,间距很奇怪,但您可以将其删除。
第二个正则表达式是
import re
the_str = """
Intern - RVA-QA PK
Fulltime - VA - BN146
Intern - STP_NA
Intern - ZXU RMP LM
"""
reg = re.compile("\n.*?- (.*)")
a = re.findall(reg,the_str)
print(a)
这将返回所有正确答案的数组,没有任何间距问题。
输出:
['RVA-QA PK','VA-BN146','STP_NA','ZXU RMP LM']
希望这有帮助 如果您需要去掉前缀,那么用空字符串替换字符串。Prefix-Postfix.replacePrefix-,`Prefix和Postfix是我所需要的基本概念。它可以是任何类似BDHJ-2134或NA 4A-MNB的东西。Regex也可以工作,split也可以工作。如果您只需要去掉前缀,那么就用空字符串替换字符串。Prefix-Postfix.replacePrefix-,`Prefix和Postfix是我所需要的基本概念。它可以是任何类似BDHJ-2134或NA 4A-MNB的东西。正则表达式也可以工作,拆分也可以工作。问题是,如果我在后缀中添加更多连字符,就会出现故障,正如前面提到的,后缀中可能包含连字符和空格。您使用正则表达式还是拆分?正则表达式1将工作,无论你有什么在后固定的事情是,打破了
如果我在后缀中添加了更多连字符,正如前面提到的,后缀中可能包含连字符和空格。您使用的是正则表达式还是拆分?无论您在postfix中使用了什么,正则表达式1都可以工作