Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在模式之后提取子字符串_Python - Fatal编程技术网

Python 如何在模式之后提取子字符串

Python 如何在模式之后提取子字符串,python,Python,我对Python相当陌生。我想知道在特定模式之后提取子字符串的最佳方法。模式是以下前缀-后缀。我想隔离后缀。我可以保证前缀只包含字母,但我不能保证其长度。另一方面,后缀可能包含空格和连字符;它可以是任何字符。我只需要去掉前缀,保留“后缀” """ Example input: Intern - RVA-QA PK Fulltime - VA - BN146 Intern - STP_NA Intern - ZXU RMP LM Desired result: RV

我对Python相当陌生。我想知道在特定模式之后提取子字符串的最佳方法。模式是以下前缀-后缀。我想隔离后缀。我可以保证前缀只包含字母,但我不能保证其长度。另一方面,后缀可能包含空格和连字符;它可以是任何字符。我只需要去掉前缀,保留“后缀”

"""
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都可以工作