使用re.split()

时间:2019-01-17 03:59:42

标签: regex python-3.x split

我试图理解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方法来解决这个问题,但是我不知道为什么''在结果的两端。

4 个答案:

答案 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+commaTAB一样工作,它将用作列定界符,无论您是否有东西,它都表示之后是新的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.

我想我不需要逗号了。然后,我将字符串转换为数字,然后离开。