如何在某些特定字母之后获取字符串?

时间:2019-03-30 07:42:28

标签: python regex

如何从某些特定字符中获取字符串? (更具体地说,从“ A8测试”中获取“测试”) 在这种情况下,“ A8”遵循"[A-Z]+[0-9]+"之类的模式。 因此也可以是“ C6测试”,“ X90测试”等。

我在Python中使用"(?<=[A-Z]+[0-9]).+"进行了尝试,这引发了异常: "sre_constants.error: look-behind requires fixed-width pattern."

这意味着我应该使用固定宽度的模式,例如"(?<=[A-Z]{1}[0-9]{1})"

但是实际上它不是固定宽度的。我该怎么办?

5 个答案:

答案 0 :(得分:3)

如果您希望将其余部分放在模式"[A-Z]+[0-9]+"后面,则可以尝试以下方法:

import re 

s1 = 'A8 test'
s2 = 'C6 123'
s3 = 'X90 test32'

# parentheses is what you want
p = re.compile("[A-Z]+[0-9]+ (\w+)")

print(p.findall(s1))
print(p.findall(s2))
print(p.findall(s3))

输出:

['test']
['123']
['test32']

希望对您有所帮助,如有其他问题,请发表评论。 :)

答案 1 :(得分:2)

您可以使用捕获组来获取所需的内容。

>>> regexp = r"[A-Z]+[0-9]+ (.+)"
>>> re.search(regexp, "C6 test")[1]
"test"
>>> re.search(regexp, "X90 test")[1]
"test"
>>> re.search(regexp, "CBF58456 test")[1]
"test"

请注意,您显示的当前模式将使用任意数量的大写字母,后跟任意数量的数字,只要每个数字中至少有一个即可。还要注意,我上面的示例在第一部分和测试字符串之间需要一个空格来捕获。

答案 2 :(得分:2)

您还可以使用public class BootReceived extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { Toast.makeText(context, intent.getAction(), Toast.LENGTH_LONG).show(); Log.d("IfWalaBooot", intent.getAction()); Intent intent1 = new Intent(context, MainActivity.class); intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1); Intent tni = new Intent(context, MainService.class); tni.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startService(tni); } 抛弃不需要的re.sub的一部分,只需使用空的str作为第二个参数:

str

答案 3 :(得分:2)

import re
ex = r"[A-Z]+[0-9]+ (.+)"
print(re.search(ex , "X90 test")[1])
print(re.search(ex , "C6 test")[1])
print(re.search(ex , "CBF58456 test")[1])

输出

test
test
test

答案 4 :(得分:1)

您可以拆分字符串,然后获取字符串。

>>> re.split(r'([A-Z]+[0-9]+ )(test)', 'A8 test')
['', 'A8 ', 'test', '']

或者您可以编写一个简单的函数来通过不使用正则表达式在整个字符串中查找您的字符串。