futui 发表于 2023-5-2 16:44:45

提出字符串的问题,求大师帮忙,谢谢

text = '通用设备70/195|祥鑫科技33/195通用设备;泰嘉股份107/195通用设备'
我想以“|”为界:
         前部分提出字符串:通用设备
         后面部分提出字符串:祥鑫科技,泰嘉股份,即凡是字符开头后面带数字的提出(祥鑫科技33/195,泰嘉股份107/195),但不要数字

求大师帮忙,谢谢

陶远航 发表于 2023-5-2 16:45:48

本帖最后由 陶远航 于 2023-5-2 16:49 编辑

你可以使用正则表达式来匹配你需要的字符串,然后提取出匹配的内容。

代码如下:
import re

text = '通用设备70/195|祥鑫科技33/195通用设备;泰嘉股份107/195通用设备'

# 匹配前部分字符串
pattern1 = r'(.+?)\d*/\d*\|'
match1 = re.search(pattern1, text)
if match1:
    part1 = match1.group(1)
else:
    part1 = ''

# 匹配后部分字符串
pattern2 = r'\b(+)[^\d]*'
match2 = re.findall(pattern2, text)
part2 = '|'.join(match2)

print(part1)
print(part2)

输出:
通用设备
祥鑫科技|泰嘉股份

解释:

第一个正则表达式 (.+?)\d*/\d*\| 匹配以数字和斜杠组成的字符串(如70/195),以及在此之前的所有字符,直到遇到竖杠 |。由于匹配字符部分使用了非贪婪匹配,即加上 ?,这样可以保证匹配最短的字符串,避免误匹配。
第二个正则表达式 \b(+)[^\d]* 匹配所有以字母开头,后面跟着非数字字符的单词。由于不需要提取单词后面的数字,因此在匹配后缀部分时使用了否定字符组 [^\d]*,以匹配非数字字符。
最后,将匹配到的字符串通过 join() 方法组合起来即可。

isdkz 发表于 2023-5-2 16:46:06

可以使用字符串的split函数和正则表达式来实现。

1. 以"|"为界,将字符串分成两部分:

parts = text.split("|")


2. 前面部分的字符串即为parts,提出即可:

first_part = parts# "通用设备"


3. 后面部分的字符串即为parts,我们可以使用正则表达式来提取出所有符合要求的内容。具体来说,我们需要匹配所有的字母和汉字,紧跟着一个数字,然后紧跟着斜杠和数字。使用以下正则表达式即可:

import re

regex = r"([\u4e00-\u9fa5a-zA-Z]+)\d+/\d+"


这个正则表达式的意思是先匹配一个汉字或字母,然后匹配一个或多个数字,然后匹配一个斜杠,最后匹配一个或多个数字。我们将汉字或字母使用()包起来,表示我们想提取这部分内容。

4. 然后使用re模块的findall函数来查找所有匹配的内容:

matches = re.findall(regex, parts)


5. matches即为所有符合要求的字符串列表,我们可以使用join函数将它们拼接成一个字符串:

second_part = ",".join(matches)# "祥鑫科技,泰嘉股份"


完整代码如下:

import re

text = '通用设备70/195|祥鑫科技33/195通用设备;泰嘉股份107/195通用设备'

parts = text.split("|")
first_part = parts

regex = r"([\u4e00-\u9fa5a-zA-Z]+)\d+/\d+"
matches = re.findall(regex, parts)
second_part = ",".join(matches)

print(first_part)# "通用设备"
print(second_part)# "祥鑫科技,泰嘉股份"

sfqxx 发表于 2023-5-2 16:53:33

text = '通用设备70/195|祥鑫科技33/195通用设备;泰嘉股份107/195通用设备'

# 以“|”为界分割字符串
parts = text.split("|")

# 前部分提取字符串
front_string = parts

# 后面部分提出字符串
back_strings = []
for part in parts:
    # 寻找第一个数字的位置
    for index in range(len(part)):
      if part.isdigit():
            break
    name = part[:index]# 取出除数字外的部分
    back_strings.append(name)

print(f"前部分提取字符串:{front_string}")
print(f"后部分提取字符串:{back_strings}")
输出:

前部分提取字符串:通用设备
后部分提取字符串:['祥鑫科技', '泰嘉股份']
有用请设置最佳答案

futui 发表于 2023-5-2 16:59:20

本帖最后由 futui 于 2023-5-2 17:08 编辑

陶远航大师第一部分出结果,isdkz大师和sfqxx大师第二部分有结果,isdkz第二部分可以一次把我要的三个结果全提出来

sfqxx 发表于 2023-5-2 17:03:37

futui 发表于 2023-5-2 16:59
陶远航大师第一部分出结果,isdkz和sfqxx第二部分有结果,isdkz第二部分可以一次把我要的三个结果全提出来

。。。

歌者文明清理员 发表于 2023-5-2 18:09:39

sfqxx 发表于 2023-5-2 17:03
。。。

{:10_277:}
页: [1]
查看完整版本: 提出字符串的问题,求大师帮忙,谢谢