我正在尝试使用Python的分区和正则表达式来清理文本字符串。例如:
testString = 'Tre Bröders Väg 6 2tr'
sep = '[0-9]tr'
head,sep,tail = testString.partition(sep)
head
>>>'Tre Br\xc3\xb6ders V\xc3\xa4g 6 2tr'
头部仍然包含我要删除的 2tr 。我对正则表达式不是那么好,但不应该[0-9]做这个伎俩吗?
我希望这个例子的输出是
head
>>> 'Tre Br\xc3\xb6ders V\xc3\xa4g 6
答案 0 :(得分:2)
str.partition
不支持正则表达式,因此当你给它一个类似 - '[0-9]tr'
的字符串时,它会尝试在testString
中找到基于的head
中的确切字符串,它是不使用任何正则表达式。
根据documentation of str.partition
-
在第一次出现sep时拆分字符串,并返回包含分隔符之前的部分的3元组,分隔符本身以及分隔符之后的部分。如果找不到分隔符,则返回一个包含字符串本身的3元组,后跟两个空字符串。
既然你说,你只想要1
,你可以使用re.split()
模块中的re
方法,将maxsplit设置为str.partition
,然后再进行第一次元素,应该等同于import re
testString = 'Tre Bröders Väg 6 2tr'
sep = '[0-9]tr'
head = re.split(sep,testString,1)[0]
尝试的内容。示例 -
>>> import re
>>> testString = 'Tre Bröders Väg 6 2tr'
>>> sep = '[0-9]tr'
>>> head = re.split(sep,testString,1)[0]
>>> head
'Tre Bröders Väg 6 '
演示 -
(?:\\.|[^\\"])*
答案 1 :(得分:1)
普通re.split()
方法
您可以使用 head
提取 re.split()
。
import re
testString = 'Tre Bröders Väg 6 2tr'
sep = r'[0-9]tr' # "r" is essential here!
head, tail = re.split(sep, testString)
head.strip()
>>>'Tre Bröders Väg 6'
巧克力洒re.split()
法
如果你用 sep
捕获 ()
,re.split()
的行为就像一个伪 re.partition()
(Python 中没有这样的方法,实际上......)
import re
testString = 'Tre Bröders Väg 6 2tr'
sep = r'([0-9]tr)' # "()" added.
head, sep, tail = re.split(sep, testString)
head, sep, tail
>>>('Tre Bröders Väg 6 ', '2tr', '')
答案 2 :(得分:0)
对于仍在寻找如何进行正则表达式分区的答案的人,请尝试以下功能:
import regex # re also works
def regex_partition(content, separator):
separator_match = regex.search(separator, content)
if not separator_match:
return content, '', ''
matched_separator = separator_match.group(0)
parts = regex.split(matched_separator, content, 1)
return parts[0], matched_separator, parts[1]