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

Python 如何找到字符串的特定部分?

Python 如何找到字符串的特定部分?,python,csv,Python,Csv,访问一个CSV文件,循环遍历所有行(字符串),并且我希望保持/打印从“.”开始的每个字符串的所有部分,中间有两个单词,结尾是“.”或“!”. 例如,如果字符串是:“这是我的新频道。请订阅!”我只想保留“。请订阅!” 到目前为止,我只有这个来显示每个字符串中有多少个单词: with open("data2.csv", encoding="utf-8", newline='') as f: reader = csv.reader(f) for

访问一个CSV文件,循环遍历所有行(字符串),并且我希望保持/打印从“.”开始的每个字符串的所有部分,中间有两个单词,结尾是“.”或“!”.

例如,如果字符串是:“这是我的新频道。请订阅!”我只想保留“。请订阅!”

到目前为止,我只有这个来显示每个字符串中有多少个单词:

with open("data2.csv", encoding="utf-8", newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        rowstr = str(row[1])
        res = len(row[1].split())
        print(res)
我试过:

with open("data2.csv", encoding="utf-8", newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        rowstr = row[1]
        res = len(row[1].split())
        re.findall(r"\.\S+\s\S+[.?!]", rowstr)
        print(row[1])
我没有从findall获得任何输出,只有从打印行[1]获得输出

修好了

工作代码:

with open("data2.csv", encoding="utf-8", newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        rowstr = row[1]
        res = len(row[1].split())
        finalData = re.findall(r"(\.\W\w+\W\w+[\.\?!])", rowstr)
        print(finalData)

您可以使用正则表达式:

re.findall(r'(\.\W\w+\W\w+[\.\?!])$',"This is my new channel. Please subscribe!" )
哪个输出:
['.请订阅!'

您可以使用正则表达式:

re.findall(r'(\.\W\w+\W\w+[\.\?!])$',"This is my new channel. Please subscribe!" )
哪个输出:

['.请订阅!'

Regex是解决此类问题的最佳方案。请参考这里

Regex是解决此类问题的最佳方案。请参考这里

可以使用正则表达式<代码>r“\。\S+\S\S+[.?!]”这是一个非常奇怪的要求。为什么正好是两个单词?
行[1]
已经是一个字符串,您不需要调用
str()
rowstr
甚至在程序中的其他任何地方都没有使用…@TimRoberts我尝试过实现它,但没有成功。我已经用我尝试过的代码更新了我的帖子。你可以使用正则表达式<代码>r“\。\S+\S\S+[.?!]”这是一个非常奇怪的要求。为什么正好是两个单词?
行[1]
已经是一个字符串,您不需要调用
str()
rowstr
甚至在程序中的其他任何地方都没有使用…@TimRoberts我尝试过实现它,但没有成功。我已经用我尝试过的代码更新了我的帖子。我尝试过实现它,但没有成功。我已经用我尝试过的代码更新了帖子。再尝试几次后,我终于让它工作了!谢谢!我也用工作代码更新了这个帖子。如果你问了问题,你可以考虑接受答案!对不起,我完全忘了。完成了。我尝试过实现这一点,但没有成功。我已经用我尝试过的代码更新了帖子。再尝试几次后,我终于让它工作了!谢谢!我也用工作代码更新了这个帖子。如果你问了问题,你可以考虑接受答案!对不起,我完全忘了。好了,谢谢!我会看一看的:)谢谢!我来看看:)