是否有一个Python函数可以从字符串中修剪空格(空格和制表符)?
示例:\t example string\t
→example string
假设我有一个字符串'gfgfdAAA1234ZZZuijjk'
,我想只提取'1234'
部分.
我只知道在我感兴趣的部分之前AAA
和之后ZZZ
的几个字符是什么1234
.
使用sed
它可以用字符串做这样的事情:
echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"
Run Code Online (Sandbox Code Playgroud)
这将给我1234
带来的结果.
如何在Python中做同样的事情?
我想使用来自用户的输入作为搜索某些文本的正则表达式模式.它有效,但我如何处理用户放置在正则表达式中有意义的字符的情况?例如,用户想要搜索Word (s)
:正则表达式引擎将(s)
作为一个组.我希望它像一个字符串一样对待它"(s)"
.我可以运行replace
用户输入并替换(
with \(
和)
with \)
但问题是我需要替换每个可能的正则表达式符号.你知道更好的方法吗?
re.compile('\s+', flags = re.UNICODE)
Run Code Online (Sandbox Code Playgroud)
上面的代码在 python3 中给出了以下警告。
SyntaxWarning: invalid escape sequence \s
Run Code Online (Sandbox Code Playgroud)
我通过使用修复它r'\s+'
。这是解决问题的正确方法吗?
我更多地使用 R,而且我在 R 中更容易做到:
> test <- c('bbb', 'ccc', 'axx', 'xzz', 'xaa')
> test[grepl("^x",test)]
[1] "xzz" "xaa"
Run Code Online (Sandbox Code Playgroud)
但是如果test
是一个列表,如何在python中做到这一点?
PS我正在使用谷歌的python练习学习python。我更喜欢使用回归表达式。
我正在尝试使用SkLearn的TfidfVectorizer提取单字组,双字组和三字组的词汇。这是我当前的代码:
max_df_param = .003
use_idf = True
vectorizer = TfidfVectorizer(max_df = max_df_param, stop_words='english', ngram_range=(1,1), max_features=2000, use_idf=use_idf)
X = vectorizer.fit_transform(dataframe[column])
unigrams = vectorizer.get_feature_names()
vectorizer = TfidfVectorizer(max_df = max_df_param, stop_words='english', ngram_range=(2,2), max_features=max(1, int(len(unigrams)/10)), use_idf=use_idf)
X = vectorizer.fit_transform(dataframe[column])
bigrams = vectorizer.get_feature_names()
vectorizer = TfidfVectorizer(max_df = max_df_param, stop_words='english', ngram_range=(3,3), max_features=max(1, int(len(unigrams)/10)), use_idf=use_idf)
X = vectorizer.fit_transform(dataframe[column])
trigrams = vectorizer.get_feature_names()
vocab = np.concatenate((unigrams, bigrams, trigrams))
Run Code Online (Sandbox Code Playgroud)
但是,我想避免数字和包含数字的单词,并且当前输出包含诸如“ 0 101 110 12 15th 16th 180c 180d 18th 190 1900 1960s 197 1980 1b 20 200 200a …
你能帮我理解一下这个行为吗:
>>> a = "abc\\def\\ghi"
>>> a.split(r"\\")
['abc\\def\\ghi']
Run Code Online (Sandbox Code Playgroud)
然而,在花了几分钟和排列后,我发现这个目前正在起作用:
>>> a.split("\\")
['abc', 'def', 'ghi']
Run Code Online (Sandbox Code Playgroud)
你能指出我导致这种行为的文献/设计考虑因素吗?
我想知道使用字符串前缀"R"的时候还是不找使用python正则表达式句号(句号)时,我得到了相同的结果的原因.
阅读数源(下面的链接)的倍数次,用代码尝试找到相同的结果(同样见下文)后,我仍然不确定的:
re.compile("\.").sub("!", "blah.")
Run Code Online (Sandbox Code Playgroud)
"胡说!"
re.compile(r"\.").sub("!", "blah.")
Run Code Online (Sandbox Code Playgroud)
"胡说!"
re.compile(r"\.").search("blah.").group()
Run Code Online (Sandbox Code Playgroud)
''
re.compile("\.").search("blah.").group()
Run Code Online (Sandbox Code Playgroud)
''
我看过的资料来源:
Python文档:字符串文字 http://docs.python.org/2/reference/lexical_analysis.html#string-literals
r前缀用于原始字符串 http://forums.udacity.com/questions/7000217/r-prefix-is-for-raw-strings
输入中有多个空格分隔的字符,例如: string = "a b c d a s e "
该模式应该是什么样的,当我re.search
使用模式对输入进行处理时,我会j
通过使用输入第一个字符及其后面的空格.group(j)
?
我试过这种东西,"^(([a-zA-Z])\s)+"
但这不起作用.我该怎么办?
编辑 我的实际问题在标题中,并且正文仅描述了它的一个特例:这是问题的一般版本:如果我必须接受特定类型的所有模式(初始问题具有模式"[a-zA] -Z]\s")从一个字符串,我该怎么办?
python ×7
regex ×5
string ×4
list ×1
python-3.x ×1
string-split ×1
strip ×1
subset ×1
substring ×1
trim ×1
whitespace ×1