从字符串中仅删除完全匹配的子字符串

时间:2019-12-21 20:58:38

标签: python python-3.x pandas

我有一个如下所示的df:

    @PostMapping(value = "checksum", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    public ResponseEntity<String> calculateChecksum(HttpServletRequest request) throws NoSuchAlgorithmException {
        String hex = null;
        int bufferSize = 256 * 1024;
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        try (DigestInputStream digestInputStream = new DigestInputStream(request.getInputStream(), messageDigest)) {
            byte[] buffer = new byte[bufferSize];
            while (digestInputStream.read(buffer) > 0) {
                log.info("log");
            }
            messageDigest = digestInputStream.getMessageDigest();
            byte[] resultByteArray = messageDigest.digest();
            hex = byteArrayToHex(resultByteArray);
        } catch (Exception e) {
            log.error("Failed to calculate checksum", e);
        }
        return ResponseEntity.ok(hex);
    }

    private static String byteArrayToHex(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp = "";
        for (byte value : b) {
            stmp = (Integer.toHexString(value & 0XFF));
            if (stmp.length() == 1) {
                hs.append("0").append(stmp);
            } else {
                hs.append(stmp);
            }
        }
        return hs.toString();
    }

我正在寻找一种从列表中剥离子字符串而又不会过度剥离的方法。 我曾尝试使用name id John McNamara 3498 Jane Adams, M.D. 6725 Nour Abd Almohsen Jr M.D. 0197 Alex Ambrose PhD 3287 Nancy Ann Brown, MPH, PhD 9127 Kathy W. 4389 Jack Joshua Smith White 6756 MPHJackie Goldman 3294 Mort Evans 5586 ,但在传递包含MD,MPH等内容的列表时,会导致单个字母从不包含这些子字符串的名称中剥离(即Mort Evans成为ort Evans)。使用lstrip也失败了,因为它无法识别偶然被绑定到名称上的子字符串(即MPHJackie Goldman仍然存在)。

理想情况下,我希望输出如下所示:

.replace

1 个答案:

答案 0 :(得分:2)

这里是应该最后匹配一个的一个。 IT可能会更好,但是我创建了一个regex101,您可以使用它进行测试:

r'(M\.D\.,? ?$)|(PhD,? ?$)|(MPH,? ?)|(,)'

此网站包含您所有的匹配项,正则表达式及其匹配项:

https://regex101.com/r/nyaAqJ/3

这是一个适用于剥离的应用程序,因为剥离似乎具有奇怪的行为:

import re
df['name'].apply(lambda x: re.sub(r'(?:=M\.D\.,? ?$)|(PhD,? ?$)|(MPH,? ?)|(,)', '', x))

,如果可行:

df['name'] = df['name'].apply(lambda x: re.sub(r'(?:=M\.D\.,? ?$)|(PhD,? ?$)|(MPH,? ?)|(,)', '', x))

我希望这对您有帮助,如果您需要任何更新,或者发现无法解决的用例,请告诉我