3 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以使用\p{Ps}
?Punctuation, Open?and?\p{Pe}
,?Punctuation, Close?, Unicode 類。
String par_paired_punct = "\\p{Ps}([^\\p{Ps}\\p{Pe}]*)\\p{Pe}";
它們比括號(hào)更匹配,但您可以“手動(dòng)”排除不需要的字符。
在 Punctuation, Open 類中,以下字符不是左括號(hào)或圓括號(hào):
U+0F3A? TIBETAN MARK GUG RTAGS GYON ?? ?
U+0F3C? TIBETAN MARK ANG KHANG GYON ?? ?
U+169B? OGHAM FEATHER MARK? ?? ?
U+201A? SINGLE LOW-9 QUOTATION MARK ?? ?
U+201E? DOUBLE LOW-9 QUOTATION MARK ?? ?
U+27C5? LEFT S-SHAPED BAG DELIMITER ?? ?
U+29D8? LEFT WIGGLY FENCE? ??? ?
U+29DA? LEFT DOUBLE WIGGLY FENCE? ? ?? ?
U+2E42? DOUBLE LOW-REVERSED-9 QUOTATION MARK? ? ?? ?
U+301D? REVERSED DOUBLE PRIME QUOTATION MARK? ? 〝? ?
U+FD3F? ORNATE RIGHT PARENTHESIS? ? ?? ?
在 Punctuation, Close 類中,以下不是成對(duì)的括號(hào)字符:
U+0F3B? TIBETAN MARK GUG RTAGS GYAS ?? ?
U+0F3D? TIBETAN MARK ANG KHANG GYAS ?? ?
U+169C? OGHAM REVERSED FEATHER MARK ?? ?
U+27C6? RIGHT S-SHAPED BAG DELIMITER? ? ?? ?
U+29D9? RIGHT WIGGLY FENCE? ?? ?
U+29DB? RIGHT DOUBLE WIGGLY FENCE? ??
U+301E? DOUBLE PRIME QUOTATION MARK 〞
U+301F? LOW DOUBLE PRIME QUOTATION MARK ?? ?
U+FD3E? ORNATE LEFT PARENTHESIS ?? ?
正則表達(dá)式看起來像
String par_rx = "[\\p{Ps}&&[^\\u0F3\\u0F3C\\u169B\\u201A\\u201E\\u27C5\\u29D8\\u29DA\\u2E42\\u301D\\uFD3F]]" +
? ? ? ? ? ? ? ? ?"((?:[^\\p{Ps}\\p{Pe}]|[\\u0F3\\u0F3C\\u169B\\u201A\\u201E\\u27C5\\u29D8\\u29DA\\u2E42\\u301D\\uFD3F\\u0F3B\\u0F3D\\u169C\\u27C6\\u29D9\\u29DB\\u301E\\u301F\\uFD3E])*)" +
? ? ? ? ? ? ? ? ?"[\\p{Pe}&&[^\\u0F3B\\u0F3D\\u169C\\u27C6\\u29D9\\u29DB\\u301E\\u301F\\uFD3E]]";

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
我猜你可能想設(shè)計(jì)一個(gè)表達(dá)式,可能類似于:
[((]\s*([^))]*)\s*[))]
在這些 char 類中,您想要的括號(hào)將放在何處:
[((]
測(cè)試
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class re{
? ? public static void main(String[] args){
? ? ? ? final String regex = "[((]\\s*([^))]*)\\s*[))]";
? ? ? ? final String string = "Something meaningful: shortName1 (LongName 1) Localization issue here: shortName2 (保險(xiǎn)絲2). This one should be found, too. Easy again: shortName3 (LongName 3). Yet more random text... Something meaningful: shortName1 (LongName 1) Localization issue here: shortName2 (保險(xiǎn)絲2). This one should be found, too. Easy again: shortName3 (LongName 3). Yet more random text...";
? ? ? ? final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
? ? ? ? final Matcher matcher = pattern.matcher(string);
? ? ? ? while (matcher.find()) {
? ? ? ? ? ? System.out.println("Full match: " + matcher.group(0));
? ? ? ? ? ? for (int i = 1; i <= matcher.groupCount(); i++) {
? ? ? ? ? ? ? ? System.out.println("Group " + i + ": " + matcher.group(i));
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
輸出
Full match: (LongName 1)
Group 1: LongName 1
Full match: (保險(xiǎn)絲2)
Group 1: 保險(xiǎn)絲2
Full match: (LongName 3)
Group 1: LongName 3
Full match: (LongName 1)
Group 1: LongName 1
Full match: (保險(xiǎn)絲2)
Group 1: 保險(xiǎn)絲2
Full match: (LongName 3)
Group 1: LongName 3
另一種選擇是:
(?<=[((])[^))]*(?=[))])? ??
這將輸出:
Full match: LongName 1
Full match: 保險(xiǎn)絲2
Full match: LongName 3
Full match: LongName 1
Full match: 保險(xiǎn)絲2
Full match: LongName 3

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
我用它來枚舉所有相關(guān)字符;就我而言,所有括號(hào)都很有趣。
此外,我更愿意確保只考慮匹配的括號(hào),這導(dǎo)致我在 Java 中使用了這個(gè)丑陋的正則表達(dá)式:
public?static?final?String?ANY_PARENTHESES?=?"\\([^\\(????????︵﹙(?\\)????????︶﹚)?]+\\)|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?|︵[^\\(????????︵﹙(?\\)????????︶﹚)?]+︶|﹙[^\\(????????︵﹙(?\\)????????︶﹚)?]+﹚|([^\\(????????︵﹙(?\\)????????︶﹚)?]+)|?[^\\(????????︵﹙(?\\)????????︶﹚)?]+?";
我實(shí)際上是用以下代碼構(gòu)造的:
我實(shí)際上是用以下代碼構(gòu)造的:
? ? public static final char LEFT_PARENTHESIS = '\u0028', // (
? ? ? ? SUPERSCRIPT_LEFT_PARENTHESIS = '\u207D', // ?
? ? ? ? SUBSCRIPT_LEFT_PARENTHESIS = '\u208D', // ?
? ? ? ? MEDIUM_LEFT_PARENTHESIS_ORNAMENT = '\u2768', // ?
? ? ? ? MEDIUM_FLATTENED_LEFT_PARENTHESIS_ORNAMENT = '\u276A', // ?
? ? ? ? MATHEMATICAL_LEFT_FLATTENED_PARENTHESIS = '\u27EE', // ?
? ? ? ? LEFT_WHITE_PARENTHESIS = '\u2985', // ?
? ? ? ? LEFT_DOUBLE_PARENTHESIS = '\u2E28', // ?
? ? ? ? ORNATE_LEFT_PARENTHESIS = '\uFD3E', // ?
? ? ? ? PRESENTATION_FORM_FOR_VERTICAL_LEFT_PARENTHESIS = '\uFE35', // ︵
? ? ? ? SMALL_LEFT_PARENTHESIS = '\uFE59', // ﹙
? ? ? ? FULLWIDTH_LEFT_PARENTHESIS = '\uFF08', // (
? ? ? ? FULLWIDTH_LEFT_WHITE_PARENTHESIS = '\uFF5F'; // ?
? ? public static final char RIGHT_PARENTHESIS = '\u0029', // )
? ? ? ? SUPERSCRIPT_RIGHT_PARENTHESIS = '\u207E', // ?
? ? ? ? SUBSCRIPT_RIGHT_PARENTHESIS = '\u208E', // ?
? ? ? ? MEDIUM_RIGHT_PARENTHESIS_ORNAMENT = '\u2769', // ?
? ? ? ? MEDIUM_FLATTENED_RIGHT_PARENTHESIS_ORNAMENT = '\u276B', // ?
? ? ? ? MATHEMATICAL_RIGHT_FLATTENED_PARENTHESIS = '\u27EF', // ?
? ? ? ? RIGHT_WHITE_PARENTHESIS = '\u2986', // ?
? ? ? ? RIGHT_DOUBLE_PARENTHESIS = '\u2E29', // ?
? ? ? ? ORNATE_RIGHT_PARENTHESIS = '\uFD3F', // ?
? ? ? ? PRESENTATION_FORM_FOR_VERTICAL_RIGHT_PARENTHESIS = '\uFE36', // ︶
? ? ? ? SMALL_RIGHT_PARENTHESIS = '\uFE5A', // ﹚
? ? ? ? FULLWIDTH_RIGHT_PARENTHESIS = '\uFF09', // )
? ? ? ? FULLWIDTH_RIGHT_WHITE_PARENTHESIS = '\uFF60'; // ?
? ? public static final String NO_PARENTHESES = "[^\\" + LEFT_PARENTHESIS + SUPERSCRIPT_LEFT_PARENTHESIS
? ? ? ? + SUBSCRIPT_LEFT_PARENTHESIS + MEDIUM_LEFT_PARENTHESIS_ORNAMENT + MEDIUM_FLATTENED_LEFT_PARENTHESIS_ORNAMENT
? ? ? ? + MATHEMATICAL_LEFT_FLATTENED_PARENTHESIS + LEFT_WHITE_PARENTHESIS + LEFT_DOUBLE_PARENTHESIS
? ? ? ? + ORNATE_LEFT_PARENTHESIS + PRESENTATION_FORM_FOR_VERTICAL_LEFT_PARENTHESIS + SMALL_LEFT_PARENTHESIS
? ? ? ? + FULLWIDTH_LEFT_PARENTHESIS + FULLWIDTH_LEFT_WHITE_PARENTHESIS + "\\" + RIGHT_PARENTHESIS
? ? ? ? + SUPERSCRIPT_RIGHT_PARENTHESIS + SUBSCRIPT_RIGHT_PARENTHESIS + MEDIUM_RIGHT_PARENTHESIS_ORNAMENT
? ? ? ? + MEDIUM_FLATTENED_RIGHT_PARENTHESIS_ORNAMENT + MATHEMATICAL_RIGHT_FLATTENED_PARENTHESIS
? ? ? ? + RIGHT_WHITE_PARENTHESIS + RIGHT_DOUBLE_PARENTHESIS + ORNATE_RIGHT_PARENTHESIS
? ? ? ? + PRESENTATION_FORM_FOR_VERTICAL_RIGHT_PARENTHESIS + SMALL_RIGHT_PARENTHESIS + FULLWIDTH_RIGHT_PARENTHESIS
? ? ? ? + FULLWIDTH_RIGHT_WHITE_PARENTHESIS + "]+";
? ? public static final String PARENTHESES = "\\" + LEFT_PARENTHESIS + NO_PARENTHESES + "\\" + RIGHT_PARENTHESIS;
? ? public static final String SUPERSCRIPT_PARENTHESES =
? ? ? ? "" + SUPERSCRIPT_LEFT_PARENTHESIS + NO_PARENTHESES + SUPERSCRIPT_RIGHT_PARENTHESIS;
? ? public static final String SUBSCRIPT_PARENTHESES =
? ? ? ? "" + SUBSCRIPT_LEFT_PARENTHESIS + NO_PARENTHESES + SUBSCRIPT_RIGHT_PARENTHESIS;
? ? public static final String MEDIUM_PARENTHESES_ORNAMENT =
? ? ? ? "" + MEDIUM_LEFT_PARENTHESIS_ORNAMENT + NO_PARENTHESES + MEDIUM_RIGHT_PARENTHESIS_ORNAMENT;
? ? public static final String MEDIUM_FLATTENED_PARENTHESES_ORNAMENT =
? ? ? ? "" + MEDIUM_FLATTENED_LEFT_PARENTHESIS_ORNAMENT + NO_PARENTHESES + MEDIUM_FLATTENED_RIGHT_PARENTHESIS_ORNAMENT;
? ? public static final String MATHEMATICAL_FLATTENED_PARENTHESES =
? ? ? ? "" + MATHEMATICAL_LEFT_FLATTENED_PARENTHESIS + NO_PARENTHESES + MATHEMATICAL_RIGHT_FLATTENED_PARENTHESIS;
? ? public static final String WHITE_PARENTHESES =
? ? ? ? "" + LEFT_WHITE_PARENTHESIS + NO_PARENTHESES + RIGHT_WHITE_PARENTHESIS;
? ? public static final String DOUBLE_PARENTHESES =
? ? ? ? "" + LEFT_DOUBLE_PARENTHESIS + NO_PARENTHESES + RIGHT_DOUBLE_PARENTHESIS;
? ? public static final String ORNATE_PARENTHESES =
? ? ? ? "" + ORNATE_LEFT_PARENTHESIS + NO_PARENTHESES + ORNATE_RIGHT_PARENTHESIS;
? ? public static final String PRESENTATION_FORM_FOR_VERTICAL_PARENTHESES =
? ? ? ? "" + PRESENTATION_FORM_FOR_VERTICAL_LEFT_PARENTHESIS + NO_PARENTHESES
? ? ? ? + PRESENTATION_FORM_FOR_VERTICAL_RIGHT_PARENTHESIS;
? ? public static final String SMALL_PARENTHESES =
? ? ? ? "" + SMALL_LEFT_PARENTHESIS + NO_PARENTHESES + SMALL_RIGHT_PARENTHESIS;
? ? public static final String FULLWIDTH_PARENTHESES =
? ? ? ? "" + FULLWIDTH_LEFT_PARENTHESIS + NO_PARENTHESES + FULLWIDTH_RIGHT_PARENTHESIS;
? ? public static final String FULLWIDTH_WHITE_PARENTHESES =
? ? ? ? "" + FULLWIDTH_LEFT_WHITE_PARENTHESIS + NO_PARENTHESES + FULLWIDTH_RIGHT_WHITE_PARENTHESIS;
? ? public static final char XOR = '|';
? ? public static final String ANY_PARENTHESES = PARENTHESES
? ? ? ? + XOR + SUPERSCRIPT_PARENTHESES
? ? ? ? + XOR + SUBSCRIPT_PARENTHESES
? ? ? ? + XOR + MEDIUM_PARENTHESES_ORNAMENT
? ? ? ? + XOR + MEDIUM_FLATTENED_PARENTHESES_ORNAMENT
? ? ? ? + XOR + MATHEMATICAL_FLATTENED_PARENTHESES
? ? ? ? + XOR + WHITE_PARENTHESES
? ? ? ? + XOR + DOUBLE_PARENTHESES
? ? ? ? + XOR + ORNATE_PARENTHESES
? ? ? ? + XOR + PRESENTATION_FORM_FOR_VERTICAL_PARENTHESES
? ? ? ? + XOR + SMALL_PARENTHESES
? ? ? ? + XOR + FULLWIDTH_PARENTHESES
? ? ? ? + XOR + FULLWIDTH_WHITE_PARENTHESES;
但請(qǐng)注意,它不拒絕嵌套的括號(hào)。
添加回答
舉報(bào)