Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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_Regex_String_Text Extraction - Fatal编程技术网

如何在Python中仅从正则表达式中提取一个字符串?

如何在Python中仅从正则表达式中提取一个字符串?,python,regex,string,text-extraction,Python,Regex,String,Text Extraction,我一直在尝试使用Python为自己构建一个简单的帐户管理类应用程序,它将从我的手机中读取短信,并根据一些正则表达式模式提取信息 我编写了一个复杂的正则表达式模式,并对其进行了测试。 例如: 然而,当我尝试在Python中使用str.extract()方法执行同样的操作时,我得到的是一个数据帧,每个组都有一列 Python代码如下所示: all_sms=pd.read_csv("all_sms.csv") pattern = '(account|a\/c|ac|from|acct|savings

我一直在尝试使用Python为自己构建一个简单的帐户管理类应用程序,它将从我的手机中读取短信,并根据一些正则表达式模式提取信息

我编写了一个复杂的正则表达式模式,并对其进行了测试。 例如:

然而,当我尝试在Python中使用str.extract()方法执行同样的操作时,我得到的是一个数据帧,每个组都有一列

Python代码如下所示:

all_sms=pd.read_csv("all_sms.csv")

pattern = '(account|a\/c|ac|from|acct|savings|credit in|ac\/|sb\-|acc|a\/c)(\s|\.|\-)*(no|number)*(\.|\s|:)*\s*(ending)*\s*(((n{1,}|x{1,}|[0-9]+|\*{1,}))+)\-*((n{1,}|x{1,}|[0-9]+|\*{1,}|\s))*\-*([0-9]*)'

test = all_sms.extract(pattern, expand = False)
上述消息的python代码输出:

0           from
1               
2            NaN
3            NaN
4            NaN
5     ******1234
6           1234
7           1234
8               
9               
10              

我对Python非常陌生,并试图通过亲身体验来学习,如果有人能指出我在这方面的错误,那将非常有帮助。

在深入研究正则表达式模式之前,您应该了解使用它的原因 熊猫。Pandas适用于数据分析(因此适用于您的问题) 但这里似乎有点过分了

如果你是初学者,我建议你坚持使用纯python,而不是因为熊猫 这很复杂,但因为了解python标准库将有助于您 从长远来看。如果你现在跳过基本的步骤,从长远来看,这可能会伤害你

考虑到你将要使用蟒蛇3(没有熊猫),我将继续 如下:

这不一定能解决您的复制粘贴问题,但这可能会给您一个
一个更简单的解决问题的方法的想法。

在深入研究正则表达式模式之前,你应该理解为什么要使用正则表达式 熊猫。Pandas适用于数据分析(因此适用于您的问题) 但这里似乎有点过分了

如果你是初学者,我建议你坚持使用纯python,而不是因为熊猫 这很复杂,但因为了解python标准库将有助于您 从长远来看。如果你现在跳过基本的步骤,从长远来看,这可能会伤害你

考虑到你将要使用蟒蛇3(没有熊猫),我将继续 如下:

这不一定能解决您的复制粘贴问题,但这可能会给您一个
想一个更简单的方法来解决你的问题。< /p>把代码> >:< /代码>在每个未逃逸<代码>(< /代码>。删除冗余捕获组。如果这是关于特定语言放在代码> >:<代码> >每个未逃出<代码>之后,考虑使用语言标记。(< /代码>删除多余的捕获组。如果这是关于特定语言文字的详细答案和解释,请考虑使用一个语言标记。现在试着坚持一些基本知识:)谢谢你的详细回答和解释。现在试着坚持一些基本知识:
0           from
1               
2            NaN
3            NaN
4            NaN
5     ******1234
6           1234
7           1234
8               
9               
10              
# Needed imports from standard library.
import csv
import re

# Declare the constants of my tiny program.
PATTERN = '(account|a\/c|ac|from|acct|savings|credit in|ac\/|sb\-|acc|a\/c)(\s|\.|\-)*(no|number)*(\.|\s|:)*\s*(ending)*\s*(((n{1,}|x{1,}|[0-9]+|\*{1,}))+)\-*((n{1,}|x{1,}|[0-9]+|\*{1,}|\s))*\-*([0-9]*)'
COMPILED_REGEX = re.compile(PATTERN)

# This list will store the matched regex.
found_regexes = list()

# Do the necessary loading to enable searching for the regex.
with open('mysmspath.csv', newline='') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=' ', quotechar='"')
    # Iterate over rows in your csv file.
    for row in csv_reader:
        match = COMPILED_REGEX.search(row)
        if match:
            found_regexes.append(row)

print(found_regexes)