第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何獨(dú)立于語言環(huán)境在字符串中查找括號(hào)?

如何獨(dú)立于語言環(huán)境在字符串中查找括號(hào)?

胡子哥哥 2023-05-10 13:22:02
我需要在 Java String 中找到第一對(duì)完整的括號(hào),如果它是非嵌套的,則返回其內(nèi)容。當(dāng)前的問題是括號(hào)可能在不同的區(qū)域設(shè)置/語言中由不同的字符表示。我的第一個(gè)想法當(dāng)然是使用正則表達(dá)式。但是,如果使用類似 "\((.*)\)" 的東西,要確保當(dāng)前考慮的匹配中沒有嵌套括號(hào)似乎相當(dāng)困難(至少對(duì)我而言),似乎沒有Java 匹配器中可用的類括號(hào)字符。因此,我試圖更命令地解決問題,但偶然發(fā)現(xiàn)我需要處理的數(shù)據(jù)是不同語言的問題,并且根據(jù)語言環(huán)境的不同,括號(hào)中的字符也不同。西文: (), 中文 (Locale "zh"): ()package main;import java.io.BufferedReader;import java.io.IOException;import java.io.StringReader;import java.util.HashSet;import java.util.Set;public class FindParentheses {    static public Set<String> searchNames(final String string) throws IOException {        final Set<String> foundName = new HashSet<>();        final BufferedReader stringReader = new BufferedReader(new StringReader(string));        for (String line = stringReader.readLine(); line != null; line = stringReader.readLine()) {            final int indexOfFirstOpeningBrace = line.indexOf('(');            if (indexOfFirstOpeningBrace > -1) {                final String afterFirstOpeningParenthesis = line.substring(indexOfFirstOpeningBrace + 1);                final int indexOfNextOpeningParenthesis = afterFirstOpeningParenthesis.indexOf('(');                final int indexOfNextClosingParenthesis = afterFirstOpeningParenthesis.indexOf(')');                /*                 * If the following condition is fulfilled, there is a simple braced expression                 * after the found product's short name. Otherwise, there may be an additional                 * nested pair of braces, or the closing brace may be missing, in which cases the                 * expression is rejected as a product's long name.                 */第二個(gè)帶中文括號(hào)的東西沒有找到,但是應(yīng)該有。當(dāng)然,我可能會(huì)匹配這些字符作為額外的特例,但由于我的項(xiàng)目使用 23 種語言,包括韓語和日語,我更喜歡找到任何一對(duì)括號(hào)的解決方案。
查看完整描述

3 回答

?
阿晨1998

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]]";



查看完整回答
反對(duì) 回復(fù) 2023-05-10
?
哆啦的時(shí)光機(jī)

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


查看完整回答
反對(duì) 回復(fù) 2023-05-10
?
翻翻過去那場(chǎng)雪

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)。


查看完整回答
反對(duì) 回復(fù) 2023-05-10
  • 3 回答
  • 0 關(guān)注
  • 163 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)