我试图理解re.split()
,但我想忽略逗号分隔符,句号和破折号。
我不明白的是为什么我在结果末尾得到一个空字符串。
而且我似乎无法弄清楚如何忽略逗号。
这是我的测试代码:
sntc = 'this is a sentence total $5678 fees: expenses $123,345 why not -2345 hey.'
test = re.split('\D*', sntc)
print(test)
我得到以下输出:
['', '5678', '123', '345', '2345', '']
很明显,拆分会增加太多。我可以使用其他Regex方法来解决这个问题,但是我不知道为什么''
在结果的两端。
答案 0 :(得分:0)
因为split查找正则表达式以匹配分隔符-并且hey.
匹配正则表达式,但也将2345
与字符串的末尾分开。
因此,您得到的是将'2345 hey.'
分为'2345'
和''
,其中有' hey.'
。
类似地,如果分隔符为a
,并且您有字符串aba
,则会得到结果['', 'b', '']
,因为a
将字符串的开头和结尾与中间的b
。
答案 1 :(得分:0)
re.split()
对此是明确的:
如果分隔符中有捕获组,并且在 字符串开头,结果将以空字符串开头。的 字符串末尾也是如此:
>>> re.split(r'(\W+)', '...words, words...')` ['', '...', 'words', ', ', 'words', '...', ''`
我认为您最好在这里使用re.findall(r'\D+', sntc)
。
答案 2 :(得分:0)
我认为您真的想要这个:
>>> re.findall('\d+', sntc)
['5678', '123', '345', '2345']
您的regex
没什么问题,最终可能会像这样:
>>> re.split('\D*', sntc)
['', '', '5', '6', '7', '8', '', '1', '2', '3', '', '3', '4', '5', '', '2', '3', '4', '5', '', '']
我认为您打算做的是
>>> re.split('\D+', sntc)
['', '5678', '123', '345', '2345', '']
但是,这就是split
所要解决的问题,即使它离开了nothing
,它也会分裂事物。
考虑CSV
个文件,或TAB
个分隔的xls
个文件。
就是这样设计的。 -即使逗号或TAB之间不存在任何内容,也仍然存在这些列-空白列。
这里的\D+
像comma
或TAB
一样工作,它将用作列定界符,无论您是否有东西,它都表示之后是新的column
。
对于最后\D+
个匹配的内容,同样的事情,无论您是否遵循它,它后面都仍表示一个新的column
。
答案 3 :(得分:0)
比您琥珀和Arount多。
这是我的实现方式:
whatup = sntce.replace(',', '')
#gets rid of thousands separators
testing = re.findall(r'[0-9,-.]+', whatup)
#gets rid of everything but the pos and neg numbers.
我想我不需要逗号了。然后,我将字符串转换为数字,然后离开。