在Python中将字符串替换为匹配模式

时间:2019-02-10 13:22:37

标签: python regex

我有一个像这样的字符串import java.text.SimpleDateFormat; import java.util.TimeZone; public class SimpleDateFormatTExample { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); private static String timeZone = "CST"; public static void main(String[] args) { //-Duser.timezone=UTC try { String dateTimeString1 = sdf.format(formatter.parse("2018-01-01")); System.out.println("Thread Main->> " + dateTimeString1); //output : Thread Main->> 2018-01-01 12:00:00 } catch (Exception e) { e.printStackTrace(); } new Thread(() -> { try { //timezone is changed by another thread sdf.setTimeZone(TimeZone.getTimeZone(timeZone)); String dateTimeString = sdf.format(formatter.parse("2018-01-01")); System.out.println("Thread child->> " + dateTimeString); //output : Thread child->> 2017-12-31 06:00:00 } catch (Exception e) { e.printStackTrace(); } }).start(); try { Thread.sleep(1000); String dateTimeString1 = sdf.format(formatter.parse("2018-02-15")); System.out.println("Thread Main:After timezone changes by another thread->> " + dateTimeString1); //output : Thread Main:After timezone changes by another thread->> 2018-02-14 06:00:00 } catch (Exception e) { e.printStackTrace(); } } ,我想用QH AAPL|5M|20190101093000|20190208170000|12347:M01/02/2019|F04:00:00|H154.4|L153.01|O154.4|T154|V3257替换字符串开头的所有字符,直到:M

因此剩余的字符串应为M

我不知道如何在Python正则表达式中完成此操作。请帮忙!

2 个答案:

答案 0 :(得分:1)

python str.find()方法可以解决问题。这里是一个例子:

a = "QH AAPL|5M|20190101093000|20190208170000|12347:M01/02/2019|F04:00:00|H154.4|L153.01|O154.4|T154|V3257"

print(a[a.find(":M") + 1:])  # -> M01/02/2019|F04:00:00|H154.4|L153.01|O154.4|T154|V3257

编辑

如果您真的想使用正则表达式,请看以下示例:

import re

a = "QH AAPL|5M|20190101093000|20190208170000|12347:M01/02/2019|F04:00:00|H154.4|L153.01|O154.4|T154|V3257"

print(a[re.search(":M", a).start() + 1:])  # -> M01/02/2019|F04:00:00|H154.4|L153.01|O154.4|T154|V3257

答案 1 :(得分:0)

如果必须使用正则表达式:

x = [1,2,3,3,2,0]
prev = x[0] 
curr = x[1] #keep track of two items together during iteration, previous and current
result = {"increasing": [],
          "equal": [],
          "decreasing": [],
          }


def two_item_relation(prev, curr): #compare two items in list, results in what is effectively a 3 way flag
    if prev < curr:
        return "increasing"
    elif prev == curr:
        return "equal"
    else:
        return "decreasing"


prev_state = two_item_relation(prev, curr) #keep track of previous state
result[prev_state].append([prev]) #handle first item of list

x_shifted = iter(x)
next(x_shifted) #x_shifted is now similar to x[1:]

for curr in x_shifted: 
    curr_state = two_item_relation(prev, curr)
    if prev_state == curr_state: #compare if current and previous states were same.
        result[curr_state][-1].append(curr) 
    else: #states were different. aka a change in trend
        result[curr_state].append([])
        result[curr_state][-1].extend([prev, curr])
    prev = curr
    prev_state = curr_state

def all_subcombinations(lst): #given a list, get all "sublists" using sliding windows
    if len(lst) < 3:
        return [lst]
    else:
        result = []
    for i in range(2, len(lst) + 1):
        for j in range(len(lst) - i + 1):
            result.extend([lst[j:j + i]])
    return result



print(" all Outputs ")
result_all_combinations = {}

for k, v in result.items():
    result_all_combinations[k] = []
    for item in v:
        result_all_combinations[k].extend(all_subcombinations(item))

print(result_all_combinations)
#Output:
{'increasing': [[1, 2], [2, 3], [1, 2, 3]],
 'equal': [[3, 3]],
 'decreasing': [[3, 2], [2, 0], [3, 2, 0]]}