在python中拆分字符串时如何考虑特殊字符
我有几个字符串的形式是“[一个或多个单词][数字][一个或多个单词]”,我想把它们分成两个字符串和数字。例如,如果字符串为:在python中拆分字符串时如何考虑特殊字符,python,split,Python,Split,我有几个字符串的形式是“[一个或多个单词][数字][一个或多个单词]”,我想把它们分成两个字符串和数字。例如,如果字符串为: "A sample string 20 something" 我想获得: str1 = "A sample string" numb = 20 str2 = 'something' 我已经(几乎)通过以下代码实现了我的目标: for s in row.split(): if s.isdigit(): qu
"A sample string 20 something"
我想获得:
str1 = "A sample string"
numb = 20
str2 = 'something'
我已经(几乎)通过以下代码实现了我的目标:
for s in row.split():
if s.isdigit():
quants = s
temp = row.split("{}".format(quants))
str1 = temp[0].strip()
str2 = temp[1].strip()
这在大多数情况下都适用。但是,有两个例外我无法处理:
import re
l = re.compile("((?<=\d)(?=\D)|(?=\d)(?<=\D))(?![^\(]*\))").split(test)
此处测试:
其中,
(?您可以使用带有3个捕获组的正则表达式,然后获取组的值
^(\w+(?: \w+)*(?: \([^()]*\))?) (\d+|[¼½¾]) (\w+(?: \w+)*)$
解释
^
字符串的开头
(
Capturegroup 1
\w+(?:\w+*
匹配1+个单词字符,可以选择按空格和1+个单词字符重复
(?:\([^()]*\)?
可以选择匹配一个空格并形成从开始到结束的括号
)
关闭组并匹配空格
(\d+|[¼½¾])
Capture第2组匹配所列¼½¾和空格中的1+位或1
(\w+(?:\w+*)
Capture第3组匹配1+个单词字符,并可以选择重复前面加空格的字符
$
字符串结尾
|
示例代码
输出
Some text (just as 1 example)
¼
more words
一种更广泛的模式,使用*
匹配除换行符以外的任何字符,而不是使用\w+
^(.*(?:\([^()]*\))?) (\d+|[¼½¾]) (.+)
一些注释:1)<代码> SPLITE()/代码>不会帮助你;你的解决方案只适用于单位数2),因为在文本中需要不同的方法,所以需要考虑括号内的数字。3) 有了正确的编码语句,您可以像在问题中一样在代码中包含分数。1)实际上,我的解决方案也适用于超过1位的数字,只要它们之间没有空格,这就满足了我必须处理的字符串的特征。2) 什么方法?3) 你所说的编码语句是什么意思?这些不仅仅是分数,而是unicode(?)字符(即¼不是1/4)对不起,我编辑了我的答案,以更好地满足您的需要,除了特殊字符,您是指½代码>=1/2?请您解释一下好吗?我的代码已经可以这样分解字符串了。这段代码能处理我上面提到的两个异常吗?太好了!此外,regex演示工具也非常棒。非常感谢你!
Some text (just as 1 example)
¼
more words
^(.*(?:\([^()]*\))?) (\d+|[¼½¾]) (.+)