Notepad ++ Regex用于追加行的表达部分行的开头

时间:2017-07-05 16:57:55

标签: regex notepad++

NotePad ++ Regexp:我想在一条线上寻找和隔离一个字以及前两个字。 Word并在行的开头添加它们

RegEx For Select In Line:

public class CalendarConverter extends StrutsTypeConverter {

Log logger = LogFactory.getLog(CalendarConverter.class);
String format = null;

public CalendarConverter() {
    format = "MM/dd/yyyy HH:mm";
}

public Object convertFromString(Map context, String [] values, Class toClass) {
    Calendar cal = null;
    logger.debug("-----------------> In convertFromString: value[0]- " + ((values == null || values.length < 1) ? "NULL" : values[0]));
    if (values != null && values.length == 1) {
        if (values[0].trim().length() > 0) {
            try {
                TimeZone tz = TimeZone.getDefault();
                tz = userSession.getTimeZone();
                if (tz == null) {
                    tz = TimeZone.getDefault();
                }
                DateFormat dateFormat = null; 
                if (isValidDate(values[0], format)) {
                    dateFormat = new SimpleDateFormat(format);
                }
                dateFormat.setLenient(false);
                dateFormat.setTimeZone(tz);
                Date dt = dateFormat.parse(values[0]);
                cal = Calendar.getInstance(tz);
                cal.setTime(dt);
            } catch (Exception ex) {
                logger.error("Error in date conversion");
                logger.debug(ex.getMessage());
                //throw new TypeConversionException(ex);
                }
            }
        }

    return cal;
}

public boolean isValidDate(String str, String format) {
    DateFormat df = new SimpleDateFormat(format);
    df.setLenient(false);
    ParsePosition pos = new ParsePosition(0);
    df.parse(str, pos);
    if (pos.getErrorIndex() == -1 && pos.getIndex() == str.length() )
        return true;
    else
        return false;
}

public String convertToString(Map context, Object o) {
    String data = null;
    DateFormat dateFormat = new SimpleDateFormat(format);
    TimeZone tz = TimeZone.getDefault(); 
    tz = TimeZone.getTimeZone("UTC");
    if (tz == null) {
        tz = TimeZone.getDefault();
    }
    dateFormat.setTimeZone(tz);
    logger.debug("-----------------> In convertToString: o- " + o + " (" + (o == null ? null : o.getClass().getName()) + ")");

    if (o != null) {
        if (o instanceof Calendar) {
            Calendar cal = (Calendar)o;
            data = dateFormat.format(cal.getTime());
        } else if (o instanceof Date) {
            data = dateFormat.format((Date)o);
        } else if (o instanceof Timestamp) {
            data = dateFormat.format((Timestamp)o);
        }
    }

    return data;
}
}

非常感谢帮助实现这一目标!认为

以前的例行:

([a-zA-Z.,'*]+[ ])([a-zA-Z.,'*]+[ ])(Vs )([a-zA-Z.,'*]+[ ])([a-zA-Z.,'*]+[ ]) 

后面的行:

- The Candidate o'Brien Vs O'Bama Presidential Test.
- traveling by plane Vs By TGV train.
- live stream info Chile vs Portugal How to watch Confederations Cup.
- band Cock Robin - Peter kingsbery Vs only the very best.

Nota:

当追加Firt Name复合Ex:Jean-Claude线被忽略。

  • 武术动作Chuck Norris Vs Jean-Claude Van Damme缩写为JCVD。

1 个答案:

答案 0 :(得分:0)

我认为您混淆了第一行和第二行的输出,主要问题是您希望能够匹配整个字符串并捕获您提供的模式以便以后能够使用反向引用整行和捕获组1。

我建议使用

.*?((?:[a-zA-Z.,'*]+\h+){2}Vs(?:\h+[a-zA-Z.,'*]+){2}).*

并替换为- $1 $0

模式实际上是你的,我在开始时添加.*?,在结尾添加.*(以匹配整行),并将您的模式(具有小增强功能)放入捕获组{ {1}}稍后可以使用(...)引用它。 $1是整个匹配的反向引用(这里是整行)。

模式详情

  • $0 - 除了换行符之外的任何0 +字符,尽可能少(懒惰匹配)
  • .*? - 第1组捕获:
    • ((?:[a-zA-Z.,'*]+\h+){2}Vs(?:\h+[a-zA-Z.,'*]+){2}) - 恰好2次出现
      • (?:[a-zA-Z.,'*]+\h+){2} - 一个或多个ASCII字母,点,[a-zA-Z.,'*]+,'
      • * - 一个或多个水平空格
    • \h+ - Vs子字符串
    • Vs - 见上文
  • (?:\h+[a-zA-Z.,'*]+){2} - 除了换行符之外的任何0 +字符,尽可能多(贪婪匹配)

enter image description here