有一堆我要清除的变量标签。
每个字符串都以问题编号开头,例如“ Q1_1-您几岁?”
我想删除问题开始之前的所有内容。
输入:"Q1_1 - How old are you?"
输出:"How old are you?"
刚开始使用re.sub
并了解如何根据具体情况使用它,但是一次遇到40多个变量,我一头雾水,找不到任何有效的在线方法。
在线找到此代码,它只是将字符从“ _”替换为“-”:
re.sub('/.*- / ','',myvarlabel)
答案 0 :(得分:1)
您的模式对点.*
使用贪婪的量词,这可能导致广泛匹配。
如果每个字符串都以您的模式开头,则还可以使用锚点^
来声明字符串的开头。
对于您的示例字符串,使用此模式可以获得更精确的匹配,然后用空字符串替换。
^Q\d+[a-zA-Z0-9]*_[a-zA-Z0-9]+ +- +
这将匹配
^
字符串的开头Q\d+
匹配Q后跟1个以上数字[a-zA-Z0-9]*
匹配0次以上的字符类别中列出的所有字符_[a-zA-Z0-9]+
匹配下划线,匹配字符类中列出的任何字符1次以上+- +
匹配1+倍空格,连字符,1 +倍空格注意:您可以使用\s
而不是空格,但请注意,它也会与换行符匹配。
例如:
re.sub(r"^Q\d+[a-zA-Z0-9]*_[a-zA-Z0-9]+ +- +", "", "Q1_1 - How old are you?")
或者使用否定的字符类来获得更广泛的匹配:
^Q\d+[^_]*_\S+ +- +
答案 1 :(得分:0)
import os
s = 'Q1_1 - How old are you?'
print(re.sub(r'^.*Q\d+_\d+\s-\s','',s))
为这些工作:
IN: Q21_2 - How old are you?
OUT: How old are you?
IN: 123 - Q21_2 - Q21_2 - How old are you?
OUT: How old are you?
将与此不匹配:
IN: Q21_2 : How ol - d are you?
答案 2 :(得分:0)
要删除问题编号和[space]-[space]
,您的模式应为:
s = "Q1_1 - How old are you?"
re.sub(r"^Q\d+(_\d+)? +- +", "", s)
这将匹配
Q
,digits
0-9 _digit
-
这使您可以匹配并删除以下任意项: